我是mongoDB和nosql的新手,获得总和的语法是什么?
在MySQL中,我会做这样的事情:
SELECT SUM(amount) from my_table WHERE member_id = 61;
我如何将其转换为MongoDB?这是我尝试过的:
db.bigdata.aggregate({
$group: {
_id: {
memberId: 61,
total: {$sum: "$amount"}
}
}
})
答案 0 :(得分:3)
使用http://docs.mongodb.org/manual/tutorial/aggregation-zip-code-data-set/作为参考:
db.bigdata.aggregate(
{
$match: {
memberId: 61
}
},
{
$group: {
_id: "$memberId",
total : { $sum : "$amount" }
}
})
来自MongoDB文档:
聚合管道是基于数据处理管道概念建模的数据聚合框架。文档进入多阶段管道,将文档转换为聚合结果。
答案 1 :(得分:1)
最好先匹配然后匹配组,这样系统才会对过滤后的记录执行组操作。如果先执行组操作,系统将对所有记录执行组,然后选择memberId = 61的记录。
db.bigdata.aggregate(
{ $match : {memberId : 61 } },
{ $group : { _id: "$memberId" , total : { $sum : "$amount" } } }
)
答案 2 :(得分:0)
db.bigdata.aggregate(
{ $match : {memberId : 61 } },
{ $group : { _id: "$memberId" , total : { $sum : "$amount" } } }
)
如果要求数据不是数组的一部分,如果要对文档中某些数组中存在的数据求和,则使用
db.collectionName.aggregate(
{$unwind:"$arrayName"}, //unwinds the array element
{
$group:{_id: "$arrayName.arrayField", //id which you want to see in the result
total: { $sum: "$arrayName.value"}} //the field of array over which you want to sum
})
并将得到这样的结果
{
"result" : [
{
"_id" : "someFieldvalue",
"total" : someValue
},
{
"_id" : "someOtherFieldvalue",
"total" : someValue
}
],
"ok" : 1
}