这是我的收藏集[测试]。

{"_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/

10-15 23:57
查看更多