MongoDB聚合查询

MongoDB聚合查询

MongoDB 中,聚合操作主要用于处理数据并返回计算结果。聚合操作将来自多个文档的值组合在一起,按条件分组后,再进行一系列操作(如求和、平均值、最大值、最小值)以返回单个结果。

MongoDB 提供三种方式去执行聚合操作:聚合管道(aggregation pipeline)、Map-Reduce 函数以及单一的聚合命令(count、distinct、group)。

MongoDB聚合详解

定义

聚合管道是由 aggregation framework 将文档进入一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的聚合结果。

图解

01_mongodb聚合查询.png

语法

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

如下图所示:

02_mongodb聚合查询.png

现在,我们使用 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 } ]);

执行完毕后,此时,如下图所示:

03_mongodb聚合查询.png

我们看到,此时提示我们成功插入了三条记录,现在,我们使用聚合查询,查询总记录数,具体命令如下:

db.articles.aggregate([ {$match: { $or: [{ score: { $gt: 90, $lt: 100 }}, { views: { $gt: 1000 }}]}}, { $group: { _id: null, count: { $sum: 1 }}} ]);

执行完毕后,此时,如下图所示:

04_mongodb聚合查询.png

我们看到,此时返回了合法的记录的条数。

MongoDB聚合查询总结

在 MongoDB 中,聚合操作主要用于处理数据并返回计算结果。聚合操作将来自多个文档的值组合在一起,按条件分组后,再进行一系列操作(如求和、平均值、最大值、最小值)以返回单个结果。

MongoDB 提供三种方式去执行聚合操作:聚合管道(aggregation pipeline)、Map-Reduce 函数以及单一的聚合命令(count、distinct、group)。