MongoDB中aggregate()方法实例详解

 更新时间:2023年01月03日 12:41:32   作者:白菜4220  
MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果,下面这篇文章主要给大家介绍了关于MongoDB中aggregate()方法的相关资料,需要的朋友可以参考下

前言

MongoDB的一个很大的好处是能够使用MapReduce来吧数据库查询的结果简化成一个与原来的集合完全不同的结构。MapReduce把一个数据库查询的值映射为一个完全不同的形式,然后简化结果,使它们的可用性更好。

MongoDB有一个MapReduce框架,它也允许你使用聚合来简化吧一个MapReduce操作传输到另一个MapReduce操作的一系列过程。有了MapReduce和聚合,可以用数据生成一些不平凡的业绩。聚合的概念是指,在把MongoDB服务器上的文档汇编为一个结果集时,对它们执行一些列的操作。这比在Node.js应用程序中检索它们和处理它们更高效,因为MongoDB的服务器可以在本地操作数据块。

1,了解aggergate()方法

Collection对象提供了aggregate()方法来对数据进行聚合操作。aggregate()方法的语法如下

aggregate(operators,[options],callback)

operators参数是如表1所示的聚合运算符的数组,它允许你定义对数据执行什么汇总操作。options参数允许你设置readPreference属性,它定义了从哪里读取数据。callback参数是接受err和res

可以在aggregate()方法上使用的聚合运算符
运算符说明
$project

通过重命名,添加或删除字段重塑文档。你也可以重新计算值,并添加子文档。例如,下面的例子包括title并排除name:

{$project:{title:1,name:0}}

以下是把name重命名为title的例子:

{$project{title:"$name"}}

下面是添加一个新的total字段,并用price和tax字段计算它的值的例子:

{$project{total:{$add:["$price","$tax"]}}}

$match通过使用query对象运算符来过滤文档集。
$limit限定可以传递到聚合操作的下一个管道中的文档数量。例如{$limit:5}
$skip指定处理聚合操作的下一个管道前跳过的一些文档
$unwind指定一个数组字段用于分割,对每个值创建一个单独的文档。例如{$unwind:"$myArr"}
$group

把文档分成一组新的文档用于在管道中的下一级。新对象的字段必须在$group对象中定义。你还可以把表2中列出的分组表

达式运算符应用到该组的多个文档中。例如,使用下面的语句汇总value字段:{$group:{set_id:"$0_id",total:{$sum:"$value"}}}

$sort

在把文档传递给处理聚合操作的下一个管道前对它们排序。排序指定一个带有field:<sort_order>属性的对象,其中<sort_order>

为1表示升序,而-1表示降序

2,实现聚合表达式运算符

当你实现聚合运算符时,你建立将传递到聚合操作流水线的下一级的新文档。MongoDB的聚合框架提供了许多表达式运算符,它们有助于对新字段计算值或对文档中的现有字段进行比较。

当在$group聚合管道上操作时,多个文档与创建的新文档中定义的字段匹配。MongoDB提供了一组你可以应用到这些文档的运算符,并用它在原来文档集的字段值的基础上计算新组文档中的字段值。下表列出了$group表达式运算符。

聚合$group表达式运算符
运算符说明
$addToSet返回一组文档中所有文档所选字段的全部唯一值的数组。例如:colors:{$addToSet:"color"}
$first返回一组文档中一个字段的第一个值。例如:firstValue:{$first:"$value"}
$last返回一组文档中一个字段的最后一个值。例如:lastValue:{$last:"$value"}
$max返回一组文档中一个字段的最大值。例如:maxValue:{$max:"$value"}
$min返回一组文档中一个字段的最小值。例如:minValue:{$min:"$value"}
$avg返回一组文档中以个字段的平均值。例如:avgValue:{$avg:"$value"}
$push返回一组文档中所有文档所选字段的全部值的数组。例如:username:{$push:"$username"}
$sum返回一组文档中以个字段的全部值的总和。例如:total:{$sum:"$value"}

此外,计算新的字段值时,可以应用一些字符串和算术运算符。下表列出了在聚合运算符中计算新字段值可以应用的最常用的一些运算符。

可用在聚合表达式的字符串和算术运算符
运算符说明
$add计算数值的总和。例如:valuePlus5:{$add:["$value",5]}
$divide给定两个数值,用第一个数除以第二个数。例如:valueDividedBy5:{$divide:["$value",5]}
$mod取模。例如:{$mod:["$value",5]}
$multiply计算数值数组的乘积。例如:{$multiply:["$value",5]}
$subtract给定两个数值,用第一个数减去第二个数。例如:{$subtract:["$value",5]}
$concat

连接两个字符串 例如:{$concat:["str1","str2"]}

$strcasecmp比较两个字符串并返回一个整数来反应比较结果。例如 {$strcasecmp:["$value","$value"]}
$substr返回字符串的一部分。例如:hasTest:{$substr:["$value","test"]}
$toLower将字符串转化为小写。
$toUpper将字符串转化为大写

总结

到此这篇关于MongoDB中aggregate()方法实例详解的文章就介绍到这了,更多相关MongoDB aggregate()方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MongoDB基础之查询文档

    MongoDB基础之查询文档

    这篇文章介绍了MongoDB基础之查询文档,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Windows系统启动MongoDB报错无法连接服务器的问题及解决方案

    Windows系统启动MongoDB报错无法连接服务器的问题及解决方案

    在Windows系统中启动MongoDB时遇到连接拒绝的错误,通常是因为服务未运行或配置问题,本文给大家分享Windows系统启动MongoDB报错无法连接服务器的问题及解决方案,一起看看吧
    2024-10-10
  • PHP中的mongodb group操作实例

    PHP中的mongodb group操作实例

    这篇文章主要介绍了PHP中的mongodb group操作实例,本文给出了3个group命令的用法,需要的朋友可以参考下
    2014-09-09
  • 解决mongo的tickets被耗尽导致卡顿问题

    解决mongo的tickets被耗尽导致卡顿问题

    这篇文章主要介绍了解决mongo的tickets被耗尽导致卡顿问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • ubuntu mongodb安装在哪个文件夹路径详解

    ubuntu mongodb安装在哪个文件夹路径详解

    这篇文章主要为大家介绍了ubuntu mongodb安装在哪个文件夹的安装路径详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • springboot整合mongodb

    springboot整合mongodb

    这篇文章主要介绍了springboot如何整合mongodb,mongodb的安装和使用,感兴趣的同学可以参考阅读本文
    2023-03-03
  • 解决MongoDB 排序超过内存限制的问题

    解决MongoDB 排序超过内存限制的问题

    最近小编遇到这样的问题:对集合执行一个大排序操作(如聚合),出现以下错误:(测试版本:MongoDB 3.0.6),怎么快速解决此问题呢?下面小编给大家分享MongoDB 排序超过内存限制的解决方法,一起看看吧
    2017-07-07
  • MongoDB通过查询与游标彻底玩转分布式文件存储

    MongoDB通过查询与游标彻底玩转分布式文件存储

    MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引,这篇文章主要介绍了MongoDB查询与游标,彻底玩转分布式文件存储,需要的朋友可以参考下
    2023-01-01
  • MongoDB在不同主机间复制数据库和集合的教程

    MongoDB在不同主机间复制数据库和集合的教程

    MongoDB自带了clone一族JavaScript函数来进行数据的复制,这里我们总结了MongoDB在不同主机间复制数据库和集合的教程,列举出了一些主从复制操作中常用的重要函数:
    2016-07-07
  • Vercel+MongoDB Atlas部署详细指南

    Vercel+MongoDB Atlas部署详细指南

    这篇文章主要为大家介绍了Vercel+MongoDB Atlas部署的详细指南,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08

最新评论