Node.js MongoDb聚合Sum all和Sum all with specific field

时间:2014-02-21 09:33:14

标签: node.js mongodb

这是我的收藏[测试]。

{"_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);
});

1 个答案:

答案 0 :(得分:2)

你很接近但是$exists不起作用是聚合并具有不同的功能。您要找的是$cond

db.items.aggregate([
    {$group: { 
        _id: null,
         totalValue: {$sum: "$value"}, 
         enabledValue: {$sum: {
             $cond: [
                 // Condition to test 
                 {$eq: ["$enabled", "on"] },
                 // True
                 "$value",
                 // False
                 0
            ] 
         }}
    }}
])

用法是提供不同的值,具体取决于条件是否已评估为truefalse