MongoDB 中聚合统计计算中聚合统计计算–$SUM表达式表达式
我们一般通过表达式$sum来计算总和。因为MongoDB的文档有数组字段,所以可以简单的将计算总和分成两种:
1,统计符合条件的所有文档的某个字段的总和;
2,统计每个文档的数组字段里面的各个数据值的和。这两种情况都可以通过$sum表达式来完成。
以上两种情况的聚合统计,分别对应与聚合框架中的 $group 操作步骤和 $project 操作步骤。
1.$group
直接看例子吧。
Case 1
测试集合mycol中的数据如下:
{
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by_user: 'mscto.com',
url: 'http://www.mscto.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{
title: 'NoSQL Overview',
description: 'No sql database is very fast',
by_user: 'mscto.com',
url: 'http://www.mscto.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 10
},
{
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.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
查询结果如下:
/* 1 */
{
"_id" : "Neo4j",
"num_tutorial" : 1
},
/* 2 */
{
"_id" : "mscto.com",
"num_tutorial" : 2
}
Case 2
统计每个作者被like的总和,计算表达式:
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
查询结果如下;
/* 1 */
{
评论0