MongDB基础学习(五)――投影,分页,排序,聚合(二)

2015-02-25 21:42:19 · 作者: · 浏览: 94
c4ca"),"city" : "西安", "address" : "www.dreamerkr.com.cn" }

> 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

值插入到一个数组中所得到