MongoDB中aggregate()方法实例详解

目录
  • 前言
  • 1,了解aggergate()方法
  • 2,实现聚合表达式运算符
  • 总结

前言

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

(0)

相关推荐

  • Mongodb 用户权限管理及配置详解

    一.Mongodb命令 理解 admin 数据库 安装 MongoDB 时,会自动创建 admin 数据库,这是一个特殊数据库,提供了普通数据库没有的功能. 有些用户角色赋予用户操作多个数据库的权限,而这些角色只能在 admin 数据库中创建,要创建有权操作所有数据库的超级用户,必须将该用户加入到 admin 数据库中.检查凭证时,MongoDB 将在指定数据库和 admin 数据库中检查用户账户. 内建的角色 数据库用户角色:read.readWrite;数据库管理角色:dbAdmin.dbO

  • MongoDB超大块数据问题解决

    目录 引言 一.MongoDB服务器管理 1.添加服务器 2.修改分片中的服务器 3.删除分片 二.均衡器 三.修改块的大小 四.超大块 1.分发超大块 2.分发超大块步骤: 3.避免出现超大块 4.输出内容详解: 五.系统分析器 六.一些常见的辅助命令 引言 最近项目在使用MongoDB作为图片和文档的存储数据库,为啥不直接存MySQL里,还要搭个MongoDB集群,麻不麻烦? 让我们一起,一探究竟,继续学习解决MongoDB超大块数据问题,实现快速入门,丰富个人简历,提高面试level,给自

  • MongoDB 聚合查询详解

    目录 聚合管道 管道阶段 常见操作 更多操作 - 投影 更多操作 - 展开 更多操作 - 分组 更多操作 - 入库 条件组累加器 算术运算 最值运算 数组提取 其他运算 聚合管道 聚合框架是 MongoDB 中的一组分析工具,可以对一个或多个集合中的文档进行分析. MongoDB 的聚合框架基于管道的概念:首先从集合中获取到输入,然后将输入的文档传递到一个或多个阶段,每个阶段都将之前阶段输出的内容作为输入,最终得到一个聚合结果作为输出. 上面的图是一个比较宽泛的管道流程图.这里展示一个 Mong

  • MongoDB Shell常用基本操作命令详解

    目录 MongoDB Shell 连接数据库 库(database)的操作 查看所有数据库 test 库 查看当前数据库 删除数据库 集合的基本操作 创建集合 查看集合 删除集合 其他 Shell 命令 清屏 退出 shell 小结 MongoDB Shell MongoDB Shell 是一个功能齐全的 JS 和 Node.js 的REPL环境,用于与 MongoDB 服务器进行交互,是一个 shell 环境的客户端工具. 本文介绍一些 MongoDB Shell 的常用操作. 连接数据库 使

  • MongoDB  数据模型的设计模式及优缺点

    目录 简介 近似值模式 属性模式 桶模式 计算模式 文档版本控制模式 扩展引用模式 异常值模式 预分配模式 模式版本控制模式 子集模式 树形模式 在实际开发中,大多数性能问题都可以追溯到糟糕的模型设计.官方也提供分享过文档模型设计的进阶技巧,这里简单翻译记录一下. 简介 官方文章的地址是 Building with Patterns: A Summary,其中汇总了 12 种设计模式及使用场景. 上述的图表列举了 12 种设计模式及应用场景,主要是以下这些: 近似值模式(Approximatio

  • MongoDB中aggregate()方法实例详解

    目录 前言 1,了解aggergate()方法 2,实现聚合表达式运算符 总结 前言 MongoDB的一个很大的好处是能够使用MapReduce来吧数据库查询的结果简化成一个与原来的集合完全不同的结构.MapReduce把一个数据库查询的值映射为一个完全不同的形式,然后简化结果,使它们的可用性更好. MongoDB有一个MapReduce框架,它也允许你使用聚合来简化吧一个MapReduce操作传输到另一个MapReduce操作的一系列过程.有了MapReduce和聚合,可以用数据生成一些不平凡

  • python连接、操作mongodb数据库的方法实例详解

    本文实例讲述了python连接.操作mongodb数据库的方法.分享给大家供大家参考,具体如下: 数据库连接 from pymongo import MongoClient import pandas as pd #建立MongoDB数据库连接 client = MongoClient('162.23.167.36',27101)#或MongoClient("mongodb://162.23.167.36:27101/") #连接所需数据库,testDatabase为数据库名: db=

  • React父组件调用子组件中的方法实例详解

    目录 Class组件 1. 自定义事件 2. 使用 React.createRef() 3. 使用回调Refs Function组件 补充:子组件调用父组件方法 总结 文章中涉及 ref 的应用仅为父组件调用子组件场景下的应用方式,并未涵盖 ref 的所有应用方式! Class组件 1. 自定义事件  Parent.js import React, { Component } from 'react'; import Child from './Child'; class Parent exte

  • Java中equals()方法实例详解

    目录 equals()在哪里 Java中重写的equals() 在Java中比较的推荐方法 为什么要在我们自己的类中重写equals() 重写equals()的规范 重写equals()可能的误区 一般的equals()写法 附:java中equals()方法的正确使用 总结 equals()在哪里 首先我们知道Java中Object类是所有类的父类,它里面定义了equals()方法: public boolean equals(Object obj) { return (this == obj

  • Oracle表中重复数据去重的方法实例详解

    Oracle表中重复数据去重的方法实例详解 我们在项目中肯定会遇到一种情况,就是表中没有主键 有重复数据 或者有主键 但是部分字段有重复数据 而我们需要过滤掉重复数据 下面是一种解决方法 delete from mytest ms where rowid in (select aa.rid from (select rowid as rid, row_number() over(partition by s.name order by s.id) as nu from mytest s) aa

  • Kotlin 语言中调用 JavaScript 方法实例详解

    Kotlin 语言中调用 JavaScript 方法实例详解 Kotlin 已被设计为能够与 Java 平台轻松互操作.它将 Java 类视为 Kotlin 类,并且 Java 也将 Kotlin 类视为 Java 类.但是,JavaScript 是一种动态类型语言,这意味着它不会在编译期检查类型.你可以通过动态类型在 Kotlin 中自由地与 JavaScript 交流,但是如果你想要 Kotlin 类型系统的全部威力 ,你可以为 JavaScript 库创建 Kotlin 头文件. 内联 J

  • IOS 中KVC的使用方法实例详解

    IOS 中KVC的使用方法实例详解 KVC是Key Value Coding的缩写,意思是键值编码.在iOS中,提供了一种方法通过使用属性的名称(也就是Key)来间接访问对象的属性方法.说的有的拗口,实际上就是通过类定义我们可以看到类的各种属性,那么使用属性的名称我们就能访问到类实例化后的对象的这个属性值. 这个方法可以不通过getter/setter方法来访问对象的属性.因为一个类的成员变量如果没有提供getter/setter的话,外界就失去了对这个变量的访问渠道.而KVC则提供了一种访问的

  • jQuery中ajax - get() 方法实例详解

    在jquery中使用get,post和ajax方法给服务器端传递数据,在上篇文章给大家分享了jquery中ajax-post()方法实例,下面通过本文继续学习jQuery中ajax - get() 方法,具体介绍请看下文. jQuery Ajax 参考手册 实例 使用 AJAX 的 GET 请求来改变 div 元素的文本: $("button").click(function(){ $.get("demo_ajax_load.txt", function(resul

  • jsp 中HttpClient中的POST方法实例详解

    jsp 中HttpClient中的POST方法实例详解 POST方法用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列(Request-Line)中请求URI所指定资源的附加新子项.POST被设计成用统一的方法实现下列功能: 对现有资源的注释 向电子公告栏.新闻组,邮件列表或类似讨论组发送消息 提交数据块,如将表单的结果提交给数据处理过程 通过附加操作来扩展数据库 调用HttpClient中的PostMethod与GetMethod类似,除了设置PostMethod的实例

  • JavaScript 中调用 Kotlin 方法实例详解

    JavaScript 中调用 Kotlin 方法实例详解 Kotlin 编译器生成正常的 JavaScript 类,可以在 JavaScript 代码中自由地使用的函数和属性 .不过,你应该记住一些微妙的事情. 用独立的 JavaScript 隔离声明 为了防止损坏全局对象,Kotlin 创建一个包含当前模块中所有 Kotlin 声明的对象 .所以如果你把模块命名为 myModule,那么所有的声明都可以通过 myModule 对象在 JavaScript 中可用.例如: fun foo() =

随机推荐