1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| # MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。 # 表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
# 这里我们介绍一下聚合框架中常用的几个操作: $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。 $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。 $limit:用来限制MongoDB聚合管道返回的文档数。 $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。 $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。 $group:将集合中的文档分组,可用于统计结果。 $sort:将输入文档排序后输出。 $geoNear:输出接近某一地理位置的有序文档。
hqmongodb:PRIMARY> db.col.aggregate({ $project:{ title:1, by:1, }}) { "_id" : ObjectId("5c85f81c95892d355859a619"), "title" : "PHP教程", "by" : "cn" } { "_id" : ObjectId("5c85f8f995892d355859a61a"), "title" : "JAVA教程", "by" : "cn" } { "_id" : ObjectId("5c85f93195892d355859a61b"), "title" : "mongodb教程", "by" : "cn" } # 结果中就只还有_id,tilte和by三个字段了,默认情况下_id字段是被包含的
hqmongodb:PRIMARY> db.col.aggregate({ $project:{ _id:0,title:1, by:1, }}) { "title" : "PHP教程", "by" : "cn" } { "title" : "JAVA教程", "by" : "cn" } { "title" : "mongodb教程", "by" : "cn" } # 不包含_id字段
hqmongodb:PRIMARY> db.col.aggregate([{$match:{likes:{$gt:100,$lte:200}}},{$group:{_id:null,count:{$sum:1}}}]) { "_id" : null, "count" : 2 } # $match用于获取likes大于100小于或等于200的记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。
hqmongodb:PRIMARY> db.col.aggregate({$skip:2}) { "_id" : ObjectId("5c85f93195892d355859a61b"), "title" : "mongodb教程", "description" : "mongodb是Nosql", "by" : "cn", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 } # 经过$skip管道操作符处理后,前两个文档被"过滤"掉。
|