> db.web_app.find().sort({"name":1})
{ "_id" : ObjectId("54d87cdfebde50baebb6c4ca"), "city": "西安","address" : "www.dreamerkr.com.cn" }
{ "_id" : ObjectId("54d87cdfebde50baebb6c4c9"),"name" : "好童话", "des" : "这是一个o2o的vr旅游平台" }
{ "_id" : ObjectId("54d877e4ebde50baebb6c4c8"),"name" : "追梦客", "oldName" : "好童话","description" : "这是一个VR旅游电子商务网
5.4 MongoDB的聚合
聚合操作过程中的数据记录和计算结果返回。聚合操作分组值从多个文档,并可以执行各种操作,分组数据返回单个结果。在SQL COUNT(*)和groupby 相当于MongoDB的聚集。
(1) aggregate() 方法
对于在MongoDB中聚集,应该使用aggregate()方法。
(2) 语法
aggregate()方法的基本语法如下:db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
(3) 示例
> db.web_info.find()
{ "_id" : ObjectId("54d87cdfebde50baebb6c4c9"),"name" : "好童话", "address" : "这是一个o2o的vr旅游平台" }
{ "_id" :ObjectId("54db2e0fc50ae3624c1a555c"), "name" : "追梦客", "address" :"http://www.dreamerkr.com" }
{ "_id" :ObjectId("54db2e2ac50a6a0d0c6a8c98"), "name" : "追梦客", "address" :"http://www.dreamerkr.com" }
{ "_id" :ObjectId("54db2e36c50a607e6eb3d548"), "name" : "追梦客", "address" :"http://www.dreamerkr.com" }
{ "_id" :ObjectId("54db2e6bc50a5f841ad5c196"), "name" : "追梦客", "address" :"http://www.dreamerkr.com" }
{ "_id" : ObjectId("54db2e6bc50a5f841ad5c197"),"name" : "tom" }
{ "_id" :ObjectId("54db2ebdc50a86203da25e72"), "name" : "追梦客", "address" :"http://www.dreamerkr.com" }
{ "_id" :ObjectId("54db2ebdc50a86203da25e73"), "name" : "雨打排行" }
{ "_id" :ObjectId("54db2ef5c50a536eb77a3d6d"), "name" : "追梦客", "address" :"http://www.dreamerkr.com" }
{ "_id" :ObjectId("54db2ef5c50a536eb77a3d6e"), "name" : "雨打排行" }
{ "_id" :ObjectId("54dc0687c50acb624c30dfcb"), "name" : "追梦客", "address" :"http://www.dreamerkr.com" }
{ "_id" : ObjectId("54dc0808c50a5945720b1723"),"name" : "追梦客", "address" : "http://www.dreamerkr.com" }
{ "_id" :ObjectId("54dc0808c50a5945720b1724"), "name" : "雨打排行2" }
{ "_id" :ObjectId("54dc09adc50ac37356e0f1a9"), "name" : "追梦客" }
{ "_id" :ObjectId("54dc0a4ac50a4fac80213257"), "name" : "追梦客" }
{ "_id" :ObjectId("54dc0a8cc50ad7af35250807"), "name" : "追梦客2" }
{ "_id" :ObjectId("54dc0ac4c50adf3258a884bf"), "name" : "追梦客2" }
{ "_id" :ObjectId("54dc0baec50ad2416bac179b"), "name" : "追梦客" }
{ "_id" :ObjectId("54dc0cc3c50afa2987800afe"), "name" : "追梦客" }
{"_id" : ObjectId("54dc130fc50a1c2e75e2b05c"),"name" : "追梦客", "address" : "http://www.dreamerkr.com" }
> db.web_info.aggregate([{$group: {_id : "$name", num : {$sum : 1}}}])
{ "_id" : null,"num" : 2 }
{ "_id" : "雨打排行2", "num" : 1 }
{ "_id" : "雨打排行", "num" : 3 }
{ "_id" :"tom", "num" : 1 }
{ "_id" : "追梦客", "num" : 13 }
{ "_id" : "追梦客2", "num" : 2 }
{ "_id" : "好童话", "num" : 3 }
上述使用的情况相当于SQL查询 select name, count(*) from web_info group by name。在上面的例子中,我们已分组字段name 文档,并在每个的次数name先前的值总和递增。其他聚集表达式列表如下:
| 表达式 |
描述 |
实例 |
| $sum |
总结从集合中的所有文件所定义的值. |
db.web_info.aggregate([{$group : {_id : "$name", num : {$sum : "$address"}}}]) |
| $avg |
从所有文档集合中所有给定值计算的平均. |
db.web_info.aggregate([{$group : {_id : "$name", num : {$avg : "$address"}}}]) |
| $min |
获取集合中的所有文件中的相应值最小. |
db.web_info.aggregate([{$group : {_id : "$name", num : {$min : "$address"}}}]) |
| $max |
获取集合中的所有文件中的相应值的最大. |
db.web_info.aggregate([{$group : {_id : "$name", num : {$max : "$address"}}}]) |
| $push |
值插入到一个数组生成文档中. |
db.web_info.aggregate([{$group : {_id : "$name", address : {$push: "$address"}}}]) |
| $addToSet |
值插入到一个数组中所得到 |