aggregate聚合
插入参数
{
_id: ObjectId(7df78ad8902c)
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by_user: 'runoob.com',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{
_id: ObjectId(7df78ad8902d)
title: 'NoSQL Overview',
description: 'No sql database is very fast',
by_user: 'runoob.com',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 10
},
{
_id: ObjectId(7df78ad8902e)
title: 'Neo4j Overview',
description: 'Neo4j is no sql database',
by_user: 'Neo4j',
url: 'http://www.neo4j.com',
tags: ['neo4j', 'database', 'NoSQL'],
likes: 750
}
- 现在我们通过以上集合计算每个作者所写的文章数,使用aggregate()计算结果如下:
db.col.find([{"$group":{"_id":"$by_user","count":{"$sum":1}}}])
参数分析:
这句话的意思是按照by_user进行分组,并且计算同名by_user的个数
$group 进行分组
_id : 好像是固定参数,反正这边别动
_id后面$by_user 就是按照by_user进行分组
count 是后面算数据的别称
$sum就是同名称的总和,参数表示每次加多少
其他一些聚合的参数
- 1,总和 sum
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
算出所有的值的总和: likes所有数的总和
- 2 平均数 avg
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
按找by_user进行分组,算出likes参数的平均数
- 3 最小值 min
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
算出by_user的最小值
- 4 在结果文档中插入值到一个数组中。 $push
就是在结果添加一条数据
db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
网友评论