MongoDB 数据库操作

news2025/2/24 6:29:59

场景:

已知广告点击数据的记录已经存在,数据统计在mongodb中,现在要统计广告列表pv和uv。

思路:

这个时候就想到mysql的聚合查询group、count、distinct,但是于是就找了好多文档,发现mongodb的语法和mysql还不一样,但是思路是一样的,于是各种搜索总结下来

关键代码

db.xxw_link_log.aggregate([
    {
        $match: {
            brand: 'test',
            _day_key: '20220211'
        }
    },
    {
        $group: {
            "_id": {
                "link_id": "$link_id",
                "alipay_id": "$alipay_id",
                
            },
            
        }
    },
    {
        $group: {
            "_id": "$_id.link_id",
            "distinctV": {
                "$addToSet": {
                    "value": "$_id.alipay_id",
                    "numberOfValues": "$count"
                }
            },
            count: {
                $sum: 1
            }
        }
    },
    {
        "$project": {
            "_id": 0,
            "link_id": "$_id",
            "distinctV": 1,
            "count": 1
        }
    }
])

返回结果如下
在这里插入图片描述
集合 “distinctV” 数据如下
在这里插入图片描述

解释

mongodb 中的 aggregate 代表聚合工具之一

常用操作

表达式描述
$match用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$project修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$limit用来限制MongoDB聚合管道返回的文档数。
$skip在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$group将集合中的文档分组,可用于统计结果。
$sort将输入文档排序后输出。
$lookup联表查询
$geoNear输出接近某一地理位置的有序文档。
facet/bucket分类搜索(MongoDB 3.4以上支持)

未完待续

参考文档:
MongoDB聚合(aggregate)常用操作及示例
用 MongoDB 查询来选择 distinct 和 count?
mongoDB中聚合(aggregate)的具体使用
mongodb 高级聚合查询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“易”起涨知识|一文告诉你数字化生产的优势

在信息化高速发展的时代,企业工厂的数字化转型已经不是想不想转的问题,而是必须得转的形势。 智慧工厂是现代工厂信息化发展的新阶段。是在数字化工厂的基础上,利用物联网的技术和设备监控技术加强信息管理和服务;清楚掌握产销流…

Dart语法学习-变量

一、 创建Dart File Hello, World void main() {print(Hello world); }Log: Hello world 二、变量 1.Dart 支持类型推断。 var name Voyager I;var year 1977;var antennaDiameter 3.7;var flybyObjects [A1, A2, A3, A4];var image {tags:[saturn],url:www.baidu,com};…

王道操作系统笔记(四)———— 进程同步与互斥

文章目录一、同步与互斥的概念1.1 同步与互斥的基本概念1.2 临界资源与共享资源1.3 独占设备与共享设备二、实现临界区互斥的基本方法2.1 软件实现方法2.1.1 单标志法2.1.2 双标志先检查法2.1.3 双标志后检查法2.1.4 Peterson 算法2.1.5 软件实现方法总结2.2 硬件实现方法2.2.1…

【电子通识】查找硬件学习资料的方法

做为一名硬件工程师,在工作中会经常遇到一些问题,这些问题最开始可能也并不知道是什么原因。对于这些异常现象,我们可能需要深入去了解电路原理或器件特性等方式,从原理上理解并解决。当再次遇到相同或相似的问题时,我…

Python爬虫2--数据解析方法:bs4库的使用和案例

目录标题数据解析1、BeautifulSoup库1.1 BeautifulSoup库入门1.1.1 BeautifulSoup类的基本元素:1.1.2 基于bs4库的HTML内容遍历方法1.1.3 基于bs4库的HTML格式化和编码1.2 信息组织和提取方法1.2.1 信息标记的三种形式:xml,json,yaml1.2.2 三种信息标记形…

360数据恢复如何操作?360安全卫士恢复误删文件的方法(详解)

3 60安全 卫士属于一款杀毒软件,这是很多人都知道的事情。但是你知道吗?3 60安全 卫士还有一个免费功能,就是文件恢复功能。 当文件被误删,电脑回收站又找不到,你可以尝试通过3 60里面的文件恢复功能来进行数据恢复。…

Leetcode:62. 不同路径、63. 不同路径 II(C++)

目录 62. 不同路径 问题描述: 实现代码与解析: 深度优先(超时): 原理思路: 动态规划: 原理思路: 数学方法: 原理思路: 63. 不同路径 II 问题描述&…

AcWing蓝桥杯AB组辅导课09、复杂DP

文章目录前言一、复杂DP例题例题1:AcWing 1050. 鸣人的影分身(线性dp)分析题解:DP例题2:AcWing 1047. 糖果(背包问题变形)分析题解:DP(01背包问题变形)例题3&…

静态库与动态库的生成与使用

一、库文件 预编译——>编译——>汇编——>链接(使用库)——>可执行文件 二、生成库:把大量的已经实现的代码打包起来 生成动态库: 1、将源码遍历汇编生成二进制指令 gcc -fPIC -c child.c -o child.o 2、将所有二进…

即时通讯开发之详解TCP/IP中的UDP 协议

UDP 是传输层协议,和 TCP 协议处于一个分层中,但是与 TCP 协议不同,UDP 协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议。UDP 协议头2.1UDP 端口号由于很多软件需要用到 UDP 协议,所以 UDP 协议必须通过某个标志用以区分不同的程序所需要的数据包。端口号的功能…

C 语言零基础入门教程(二十一)

C 头文件 头文件是扩展名为 .h 的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件:程序员编写的头文件和编译器自带的头文件。 在程序中要使用头文件,需要使用 C 预处理指令 #include 来引用它。前…

Linux | 编辑器gcc/g++的使用【动静态库的认识】

文章目录一、对程序的认知 && 初识gcc1、程序是如何诞生的?2、gcc的初步认识3、如何使用gcc二、gcc逐步分析程序的翻译环境1、预编译【进行宏替换】2、编译【C语言——>汇编语言】3、汇编【汇编语言——>可重定位目标二进制文件】4、链接【生成可执行…

一篇文章学会写SQL

本篇文章主要讲如何写SQL,虽然我在之前有篇文章中写到过数据库的操作和概念,其中有讲到数据库和表的操作语句以及有哪些函数和查询关键字(本篇不赘述),但毕竟理解概念和会实践书写是两码事。。 身为一名测试人员&#…

证明:lim (x->0+) x^x=1

原式:lim⁡x→0xx\lim _{x\to 0^{}} {x^{x}}x→0lim​xx 根据公式1:u(x)v(x)eu(x)ln⁡v(x)u(x)^{v(x)}e^{u(x)\ln v(x)}u(x)v(x)eu(x)lnv(x)则原式可以化为lim⁡x→0exln⁡x\lim _{x\to 0^{}} e^{x \ln x}x→0lim​exlnx 接下来利用倒代换进行进一步计算。&#xff…

【USB】USB video class (UVC)相关概念学习

UVC协议 IAD 全称Interface Association Descriptor This is used to describe that two or more interfaces are associated to the same function. An ‘association’ includes two or more interfaces and all of their alternate setting interfaces. IAD用来描述由两个…

一次JVM垃圾收集全过程

目录 JVM堆内存分配 JVM垃圾收集完整过程(带图解) 在介绍垃圾收集过程之前,有必要先对JVM堆内存做一个回顾,因为讲垃圾收集主要针对的是堆内存。 JVM堆内存分配 在JDK1.8之前,JVM堆内存主要分为新生代、老年代和永…

Kafka和Flink双剑合璧,Confluent收购Immerok引起业内广泛讨论

2023年开年开源界就出了一个大新闻,1月6日Kafka的商业化公司Confluent创始人宣布签署了收购 Immerok 的最终协议,而Immerok是一家为 Apache Flink 提供完全托管服务的初创公司,其创始团队正是Flink的创始团队。 无论是Kafka还是Flink&#x…

MQ 消息丢失、重复、积压问题,如何解决?

引入 MQ 消息中间件最直接的目的是:做系统解耦合流量控制,追其根源还是为了解决互联网系统的高可用和高性能问题。 系统解耦:用 MQ 消息队列,可以隔离系统上下游环境变化带来的不稳定因素,比如京豆服务的系统需求无论如…

你安全吗?丨生活中常见的黑产行为有哪

作者丨黑蛋电视剧《你安全吗?》我也追完了,到了终结篇。在结尾,网安黑产头子马平川终于因为陷害秦淮攻击虎迫系统被查出来就是虎迫内奸,随后也被一系列证据指出饮料厂等薅羊毛事件背后都有马平川的影子:今天我们就来聊…

python基础学习--数据类型、语句、函数

python的语法比较简单,采用缩进形式,如下: 在这里# print absolute value of an integer: a 100 if a > 0:print(a) else:print(-a)插入代码片以“#”开头的语句是注释。 注意:python是大小写敏感的,如果先写错了…