2014-02-21 174 views
1

這裏是我的收藏[測試]。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:空, 總價值: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); 
}); 

回答

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不同的值。

+0

這更像它!我試圖確定你的代碼的作用,直到你註釋掉條件結構。謝謝! –

+0

@ per.eight很高興幫助和回來編輯是值得的。這就是我通常在這些類型的問題中做到的。 –