MongoDB 聚合

news2024/11/26 5:32:28

MongoDB 聚合

MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。


aggregate() 方法

MongoDB中聚合的方法使用aggregate()。

语法

aggregate() 方法的基本语法格式如下所示:

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

实例

test集合中的数据如下:

/* 1 */
{
    "_id" : ObjectId("63e36e36da0f660d6928a751"),
    "id" : 200.0,
    "name" : "zhang",
    "age" : 32.0
}

/* 2 */
{
    "_id" : ObjectId("63e36e36da0f660d6928a752"),
    "id" : 22.0,
    "name" : "wang",
    "age" : 18.0
}

/* 3 */
{
    "_id" : ObjectId("63e36ea0da0f660d6928a753"),
    "id" : 300.0,
    "name" : "zeng",
    "age" : 28.0
}

/* 4 */
{
    "_id" : ObjectId("63e37016da0f660d6928a754"),
    "id" : 888.0,
    "name" : "zeng",
    "age" : 20.0
}

现在计算以上集合的年龄平均值,使用aggregate()计算结果如下:

db.test.aggregate([{$group : {_id : "$name", age : {$avg : "$age"}}}])

 

以上实例类似sql语句:

 select name,AVG(age) from test group by name

在上面的例子中,我们通过字段name字段对数据进行分组,并计算 age的平均值。

下表列出一些聚合的表达式:

表达式描述实例
$sum计算总和。db.test.aggregate([{$group : {_id : "$name", age: {$sum : "$age"}}}])
$avg计算平均值db.test.aggregate([{$group : {_id : "$name", age: {$avg : "$age"}}}])
$min获取集合中所有文档对应值得最小值。db.test.aggregate([{$group : {_id : "$name", age: {$min : "$age"}}}])
$max获取集合中所有文档对应值得最大值。db.test.aggregate([{$group : {_id : "$name", age: {$max : "$age"}}}])
$push将值加入一个数组中,不会判断是否有重复的值。db.test.aggregate([{$group : {_id : "$name", age: {$push: "$age"}}}])
$addToSet将值加入一个数组中,会判断是否有重复的值,若相同的值在数组中已经存在了,则不加入。db.test.aggregate([{$group : {_id : "$name", age: {$addToSet : "$age"}}}])
$first根据资源文档的排序获取第一个文档数据。db.test.aggregate([{$group : {_id : "$name", first_age : {$first : "$age"}}}])
$last根据资源文档的排序获取最后一个文档数据db.test.aggregate([{$group : {_id : "$name", last_age : {$last : "$age"}}}])

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

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

相关文章

【基础】性能测试,从0到实战(手把手教,非常实用)

一、性能基础 什么是性能测试--->本质? 基于协议来模拟用户发送的请求(业务模拟),对服务器形成一定负载。关注点:时间性能、空间性能与界面无关 性能测试分类 性能测试(狭义) 性能测试方法是通过模…

2023.2.13 调整接口中日志的调用方法

如下, 这是目前我们在接口中调用的方法,可以看到目前使用的是call mehtod 调用类方法的写法 调用的是ZHA047_CL_TOOL 中的这个SAVSTRU_DEST_R方法 输入为 dest_r (系统区分标识[returing时使用],用于识别是从哪个系统来的调用命令) 输出为 d…

如何使用微软bing的chatGPT

bing集合了chatGPT,今天介绍一下,如何申请加入到列表,体验一下。未来几个月,bing应该会放开chatGPT的接入,这样国内也可以用到这个技术了。 想要提前用到bing的chatGPT的,可以先按照我的方法申请一下&…

ElasticSearch简介

文章目录ElasticSearch简介正向索引和倒排索引正向索引倒排索引ElasticSearch和MySQL的区别ElasticSearch简介 什么是ElasticSearch? ElasticSearch 是一款非常强大的开源搜索引擎,可以帮助我们从海量的数据中快速找到需要的内容。 什么是ELK&#xff1…

C/C++排序算法(三)—— 冒泡排序和快速排序

文章目录前言1. 冒泡排序🍑 基本思想🍑 图解冒泡🍑 动图演示🍑 代码实现🍑 代码优化🍑 特性总结2. 快速排序🍑 hoare 版本🍅 图解过程🍅 动图演示🍅 代码实现…

K_A12_005 基于STM32等单片机采集红外寻迹避障模块串口与OLED0.96双显示

K_A12_005 基于STM32等单片机采集红外寻迹避障模块串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明模块工作原理:对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RC红外寻迹避障模块1.2、STM32F103C8T6红外寻迹避障模块五、基础知识学习与相关资…

R语言系列教程-----一起来学shiny吧(1)

什么是shiny?Shiny是一个R包,可让您轻松地直接从 R 构建交互式 Web 应用程序(应用程序)。本系列是个长教程,带你由浅入深学习shiny。 我们先使用系统自带的一个例子来介绍一下shiny,我们先导入shiny包 li…

RK3568开发笔记

一、了解MASKROM模式 出厂的时候,没有任何固件,但CPU有一块EPROM存储区,放有一个BOOTROM小启动程序。 这就是MASKROM模式。 使得首次烧写FLASH成为可能,不需要拆FLASH到烧录器上。 在MASKROM下,烧写UPDATE.IMG文件&…

Java实现碧蓝航线连续作战

目录一.实现功能二.主要思路三.代码实现四.用exe4j生成.exe程序五.最终效果六.代码开源一.实现功能 主线图作战结束到结算页自动点击再次前往 二.主要思路 判断是否进入了结算界面:记录结算界面某个像素点的RGB值,每隔3秒对这个像素点进行比对 移动鼠标…

浅入浅出keepalived+nginx实现高可用双机热备

对应用keepalivednginx技术实现nginx高可用进行简单的分析,下面是通过对keepalived添加校验nginx存活脚本,监控nginx的状态,应用keepalived的主备模式实现nginx的高可用。 假如192.168.100.2和192.168.100.3两台机器安装了nginx,负…

C++深入浅出(九)—— 多态

文章目录1. 多态的概念2. 多态的定义及实现🍑 多态的构成条件🍑 虚函数🍑 虚函数的重写🍑 虚函数重写的两个例外🍑 C11的override 和 final🍑 重载、覆盖(重写)、隐藏(重定义)的对比3. 抽象类🍑…

微信中如何接入chatgpt机器人才比较安全(不会收到警告或者f号)之第二步注入dll文件

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 前言 上一篇文章我们提到过,微信中如何接入chatgpt机器人才比较安全(不会收到警告或者f号)之第一步登录微信,需要的大家可以点进去看。 文接上篇,本文主要介绍如果将机器人接入到微信中的方法之一,别的方法后面专…

如何快速了解项目源文件的构成?基于 Node.js 实现项目源代码数据统计工具

当希望了解一个项目的代码规模时,首先可能会想对项目源文件的数量、类型分布、代码行数等做一下数据统计。使用 Linux/git 命令可以满足简单的统计需求,使用流行的 cloc 工具可以实现详细的源代码分析数据。此外也可以使用 Node.js 编码简单的实现个性化…

1.7配置OSPF手动汇总

实验7:配置OSPF手动汇总 实验目的实现OSPF路由汇总的配置阐明OSPF引入的外部路由时进行路由汇总的方法实验拓扑配置OSPF手动汇总实验拓扑如图1-17所示。 图1-17 配置OSPF手动汇总 实验步骤配置IP地址,配置OSPF(和实验6一致,此处略)在…

我还是学生,需要做副业吗?致各位迷茫的学生们

大家好,我是蝶衣王的小编,今天跟大家聊一聊,学生党应该做副业吗本文仅支持成人学生党查看,如果您还是未成年人,请立即退出本文。如今你唯一要做的就是好好学习,不要想那么多关于金钱的事,等到你…

CMMI-立项管理流程

立项管理(Project Initialization Management, PIM)的目的是:(1)采纳符合机构最大利益的立项建议,通过立项管理使该建议成为正式的项目(即合法化)。(2)杜绝不…

2023年阿里云活动有哪些实例规格的云服务器?如何选择这些实例规格

2023年阿里云活动有哪些实例规格的云服务器?新手用户通过阿里云活动选购阿里云服务器的时候实例规格应该怎么选,因为同配置的云服务器往往有多种不同是规格的云服务器可供选择,而且不同实例规格的云服务器之间价格差别还比较大,因…

CPP2022-28-期末模拟测试01

6-1 实现一个计算三角形面积的简单函数(假设输入的边长合理)。 分数 10 全屏浏览题目 切换布局 作者 王和兴 单位 东北大学秦皇岛分校 实现一个计算三角形面积的简单函数(假设输入的边长合理)。 函数接口定义: do…

Seata-server 源码学习(一)

Seata源码学习引入 学习了Seata的应用以后,我们从这开始要开始分析Seata的源码相关内容 源码下载 官方地址:https://seata.io/zh-cn/blog/download.html 通过idea打开seata-1.4.2版本的源码 回顾AT模式 其实在之前的应用课程中,我们已经用…

Windows 离线安装 MySQL 8

目录 1. 下载离线安装包 2. 上传解压 3 配置 my.ini 文件 4 设置系统环境变量 5 安装 MySQL 6 登录 MySQL 客户环境是内网环境,不能访问外网,只能离线安装 MySQL 了。 1. 下载离线安装包 MySQL 离线压缩包官网下载地址:MySQL :: Down…