文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MongoDB中aggregate()方法实例详解

2023-01-03 13:00

关注

前言

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()方法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯