前言
此篇博文是 Mongdb 基础系列之一;
本文为作者的原创作品,转载需注明出处;
简介
除了前文所述的那样,通过 aggregation 方法 来启用 MongoDB 的 Aggregation Pipeline 的操作,同时还提供了直接通过 aggregation 命令行的方式来启用 Aggregation Pipeline;本文将会描述如何通过 aggregation command 的方式来启动 Aggregation Pipeline;
例子
直接从一个例子入手,来快速的了解,假设我们有一个 articles collection 如下,
1 | { |
比如我们向统计 tags 在上述记录中出现的总数;
1 | db.runCommand( { |
aggregate
aggregate: “articles”,表示对 articles collection 进行聚合查询操作;pipeline
设置相关的 stages,如下所述,- $project
{ $project: { tags: 1 } },意思是,只需要将 tags 字段进行输出进行聚合即可; $unwind,将一个类型为 array 的字段,按照每一个 array 值将其拆分成多个独立的文档进行输出,比如我们有如下的数据,
1
{ "_id" : 1, "item" : "ABC1", sizes: [ "S", "M", "L"] }
通过 $unwind 对其进行拆分
1
db.inventory.aggregate( [ { $unwind : "$sizes" } ] )
得到的结果如下,
1
2
3{ "_id" : 1, "item" : "ABC1", "sizes" : "S" }
{ "_id" : 1, "item" : "ABC1", "sizes" : "M" }
{ "_id" : 1, "item" : "ABC1", "sizes" : "L" }所以,回到这里的例子,将会把数组 [ “programming”, “database”, “mongodb” ] 分别拆分成三个只包含字段 tags 的文档,分别是,
1
2
3{"programming"}
{"database"}
{"mongodb"}
- $project
cursor
对应相关的 option 参数,这里通过 cursor: {} 表示设置 cursor 的 batch size 为默认值;
相应的,如果我们要使用 db.collection.aggregation() 来做同样的事情的话,
1 | db.articles.aggregate( [ |
定义
完整的调用格式为,
1 | db.runCommand( { |
每个参数的详细描述可以参考aggregation 方法中的描述;