MongoDB 聚合运算( aggregate )
MongoDB 聚合( aggregate ) 用于处理数据,比如统计平均值,求和等。然后返回计算后的数据结果
MongoDB 聚合有点类似 SQL 语句中的 COUNT( * )
aggregate() 方法
MongoDB aggregate() 为 MongoDB 数据库提供了聚合运算
语法
aggregate() 方法的语法如下
> db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
范例
使用以下命令添加范例所需要的数据
> db.lession.remove({}); WriteResult({ "nRemoved" : 0 })
> db.lession.insert({ title: 'MongoDB 基础教程', by_user: 'yufei', tags: ['MongoDB', 'database', 'NoSQL'], favorite: 100 }); WriteResult({ "nInserted" : 1 })
> db.lession.insert({ title: 'NoSQL 基础教程', by_user: 'yufei', tags: ['MongoDB', 'database', 'NoSQL'], favorite: 10 }); WriteResult({ "nInserted" : 1 })
> db.lession.insert({ title: 'Neo4j 基础教程', by_user: 'Neo4j', tags: ['Neo4j', 'database', 'NoSQL'], favorite: 750 }); WriteResult({ "nInserted" : 1 })
现在,我们使用 aggregate() 方法统计每个作者的课程数量
> db.lession.aggregate([{$group : {_id : "$by_user", num_lession : {$sum : 1}}}]); { "_id" : "Neo4j", "num_lession" : 1 } { "_id" : "yufei", "num_lession" : 2 }
上面的例子,通过字段 by_user 字段对数据进行分组,并计算 by_user 字段相同值的总和
上面的命令类似于 SQL 中的
select by_user, count(*) from lession group by by_user
下面罗列出了一些聚合的表达式
-
- $sum
- 计算总和
db.lession.aggregate([{$group:{_id:"$by_user",num_tutorial:{$sum : "$likes"}}}])
-
- $avg
- 计算平均值
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
-
- $min
- 获取集合中所有文档对应值得最小值
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
-
- $max
- 获取集合中所有文档对应值得最大值
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
-
- $push
- 在结果文档中插入值到一个数组中
db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
-
- $addToSet
- 在结果文档中插入值到一个数组中,但不创建副本
db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
-
- $first
- 根据资源文档的排序获取第一个文档数据
db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
-
$last 根据资源文档的排序获取最后一个文档数据
db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])