聚合框架可以对集合中的文档进行变换和组合。基本上,可以用多个构件创建一个管道(pipeline),用于对一连串的文档进行处理。这些构件包括筛选(filtering)、投射(projecting)、分组(grouping)、排序(sorting)和跳过(skipping)。
- project
{"$project" : {"author" : 1}}
通过“fieldName”:1选择需要投射(返回)的字段。通过“fieldName”:0排除不需要的字段。
db.users.aggregate({"$project":{"newFieldname": "$oldFieldname"}})
重命名字段。
- group
{"$group" : {"_id" : "$author", "count": {"$sum" :1}}}
按author分组,分组后每个文档组内加1,且分组后组内数量字段名为count。
- sort
{ "$sort" : {"count" :-1}}
对结果按count降序排列。
- limit
{"$limit":5}
结果集中返回前5个文档。
- match
{"$match" : {"name": "xiaoMing"}}
匹配名字是xiaoMing的文档。
实际使用中,"$match"通常放在管道前面的位置,好处:一是可以快速将不需要的文档过滤掉,以减少管道的工作量;二是查询可以实用索引。