2017-03-17 112 views
3

我有一個集合平衡與記錄MongoDB的總和查詢返回零

{ 
"_id" : "uezyuLx4jjfvcqMXN", 
    "amount" : "10", 
"createdBy" : "AGuT6zQtSojvozbbg" 
} 
{ 
"_id" : "dCC8GrNdEjym3ryua", 
"amount" : "10", 
"createdBy" : "AGuT6zQtSojvozbbg" 
} 

我試圖計算金額的總和:

db.balance.aggregate([{$group:{_id:"$createdBy",total:{ $sum: "$amount"}}}]) 

預期輸出:

{createdBy:AGuT6zQtSojvozbbg , total:20} 

實際產量:

{ "_id" : "AGuT6zQtSojvozbbg", "total" : 0 } 

回答

2

amount字段中有字符串值。從$sum文檔:

計算並返回的數字值的總和。 $總和忽略 非數字值。

而返回零是一個預期的行爲:

如果所有操作數都是非數字,$和返回0

你應該字段值從字符串到數字轉換:

db.balance.find({amount: {$type:"string"}}).forEach(function(doc) { 
    var amountInt = new NumberInt(doc.amount); 
    db.balance.update({_id: doc._id}, {$set: {amount: amountInt}}); 
}); 

之後,您的查詢將正常工作。唯一需要添加的是投影舞臺,將_id字段重命名爲createdBy。