mongodb sum查询返回零

时间:2017-03-17 08:50:41

标签: mongodb aggregation-framework

我有一个带有记录的余额

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

1 个答案:

答案 0 :(得分:2)

您在amount字段中有字符串值。来自$sum的文档:

  

计算并返回 numeric 值的总和。 $ sum忽略   非数字值。

返回零是预期的行为:

  

如果所有操作数都是非数字的,则$ 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的投影阶段。