在 MongoDB 中,聚合操作主要用于处理数据并返回计算结果。聚合操作将来自多个文档的值组合在一起,按条件分组后,再进行一系列操作(如求和、平均值、最大值、最小值)以返回单个结果。
MongoDB 提供三种方式去执行聚合操作:聚合管道(aggregation pipeline)、Map-Reduce 函数以及单一的聚合命令(count、distinct、group)。
聚合管道是由 aggregation framework 将文档进入一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的聚合结果。
db.collection.aggregate([ { $match : {< query >}, } { $group: {< fieldl >: < field2 >} } ])
db.orders.aggregate([ { $match: { status: "A" } }, { $group: { _id: "$cust_id", total: { $sum: "$amount" } } } ])
$match 阶段,通过 status 字段过滤出符合条件的 Document(即是 Status 等于 “A” 的 Document)。
$group 阶段,按 cust_id 字段对 Document 进行分组,以计算每个唯一 cust_id 的金额总和。
我们首先,使用 mongo 命令,连接上数据库,具体命令如下:
mongo
如下图所示:
现在,我们使用 use 命令,切换到 haicoder 数据库,具体命令如下:
use haicoder
现在,我们使用 insert 插入三条记录,具体命令如下:
db.articles.insert([ { "url" : "haicoder.net/cpp", "score":100, "views" :10000 }, { "url" : "haicoder.net/golang", "score":90, "views" :20000 }, { "url" : "haicoder.net/java", "score":95, "views" :1000 } ]);
执行完毕后,此时,如下图所示:
我们看到,此时提示我们成功插入了三条记录,现在,我们使用聚合查询,查询总记录数,具体命令如下:
db.articles.aggregate([ {$match: { $or: [{ score: { $gt: 90, $lt: 100 }}, { views: { $gt: 1000 }}]}}, { $group: { _id: null, count: { $sum: 1 }}} ]);
执行完毕后,此时,如下图所示:
我们看到,此时返回了合法的记录的条数。
在 MongoDB 中,聚合操作主要用于处理数据并返回计算结果。聚合操作将来自多个文档的值组合在一起,按条件分组后,再进行一系列操作(如求和、平均值、最大值、最小值)以返回单个结果。
MongoDB 提供三种方式去执行聚合操作:聚合管道(aggregation pipeline)、Map-Reduce 函数以及单一的聚合命令(count、distinct、group)。