数据库结果展示
插入后数据结构如下
具体内容
聚合函数(aggregate)
1.1 作用
用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果,是MongoDB的高级查询语言,它允许我们通过转换和合并多个文档中的数据来生成新的单个文档中不存在的信息
1.2 聚合管道
1.2.1 $project实例
db.article.aggregate( { $project : { title : 1 , author : 1 , }} );
这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:
db.article.aggregate( { $project : { _id : 0 , title : 1 , author : 1 }});
1.2.2 $match实例
db.articles.aggregate( [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ] );
match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段group管道操作符进行处理。
1.2.3 $skip实例
db.article.aggregate( { $skip : 5 });
经过$skip管道操作符处理后,前五个文档被"过滤"掉
1.2.4 $group实例(按性别分组,计算年龄和)
db.user.aggregate([ {$group:{ _id:"$sex", num:{$sum:"$age"} } }])
1.2.5 $limit: 限制经过管道的文档数量( $limit的参数只能是一个正整数)
db.article.aggregate({ $limit : 5 });
1.2.6 $unwind:将数组元素拆分为独立字段
例如:article文档中有一个名字为tags数组字段:
> db.article.find() { "_id" : ObjectId("528751b0e7f3eea3d1412ce2"), "author" : "Jone", "title" : "Abook", "tags" : [ "good", "fun", "good" ] }
使用$unwind后:
> db.article.aggregate({$project:{author:1,title:1,tags:1}},{$unwind:"$tags"}) { "result" : [ { "_id" : ObjectId("528751b0e7f3eea3d1412ce2"), "author" : "Jone", "title" : "A book", "tags" : "good" }, { "_id" : ObjectId("528751b0e7f3eea3d1412ce2"), "author" : "Jone", "title" : "A book", "tags" : "fun" }, { "_id" : ObjectId("528751b0e7f3eea3d1412ce2"), "author" : "Jone", "title" : "A book", "tags" : "good" } ], "ok" : 1 }
1.2.7 $sort 实例
db.users.aggregate( { $sort : { age : -1, posts: 1 } });
1.3 组聚合操作符
1.4 Boolean类型聚合操作符
1.5 比较类型聚合操作符
1.6 算术类型聚合操作符
1.7 字符串类型聚合操作符
1.8 日期类型聚合操作符
1.9 条件类型聚合操作符
注:以上操作符都必须在管道操作符的表达式内来使用。
各个表达式使用参照:http://docs.mongodb.org/manual/reference/operator/aggregation-group/