这是我的收藏集[测试]。
{"_id" : "Test1", "enabled": "on", "value" : 10},
{"_id" : "Test2", "enabled": "on", "value" : 50},
{"_id" : "Test3", "enabled": "on", "value" : 10},
{"_id" : "Test4", "value" : 5},
{"_id" : "Test5", "value" : 2}
我想使用
"enabled":"on"
来获取字段的所有总值和总值,如下所示:所需结果:
[{_id:null,
totalValue:77,
totalEnabled:70
}]
这是我到目前为止所没有的,但是没有运气。
db.collection('test').aggregate({
$group: {
_id: null,
totalValue : {
$sum: "$value"
},
totalEnabled: $sum : {"enabled":{$exists:true}}
}
}, function(err, result) {
if (err) return console.dir(err)
console.log(result);
});
最佳答案
您很亲近,但$exists不起作用是聚合,并且具有不同的功能。您正在寻找的是$cond
db.items.aggregate([
{$group: {
_id: null,
totalValue: {$sum: "$value"},
enabledValue: {$sum: {
$cond: [
// Condition to test
{$eq: ["$enabled", "on"] },
// True
"$value",
// False
0
]
}}
}}
])
用法是根据条件评估为
true
还是false
提供不同的值。关于node.js - Node.js MongoDb聚合对特定字段进行总计和总计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21930391/