MongoDB - 聚合求和

4
我试图计算我们数据库中跟踪的总花费金额。每个订单文档包含一个"total_price"字段。
我尝试使用以下代码:
db.orders.aggregate({
    $group: {
        _id: null,
        total: {$sum: "$total_price"}
    }
})

很不幸,我得到的唯一输出是:{ "result" : [ { "_id" : null, "total" : 0 } ], "ok" : 1 }。但是要验证实际上存储了数值数据,只是没有被合计:db.orders.find()[0].total_price,这将导致8.99。我非常感谢任何帮助。我对使用MongoDB几乎没有经验。目前我只学习了基础知识。提前谢谢。

经过更多的测试,似乎整数可以工作,但浮点数不行。这是Mongo聚合函数的限制吗?如果是,有没有其他替代方案? - Michael
2
浮点数确实应该可以工作;您确定集合中的值确实是浮点数而不是字符串吗?如果是字符串,您确实会看到零结果。 - drmirror
@drmirror,我刚刚发现了这个问题,感谢你提供的提示。它们都被存储为字符串,有没有什么快速的方法可以在聚合查询内将它们转换为浮点数? - Michael
https://dev59.com/Y27Xa4cB1Zd3GeqPpm_F - madhead
1个回答

7

$sum只能用于整数、长整数和浮点数。目前没有将字符串解析为数字的运算符,虽然这非常有用。您可以按照Mongo convert all numeric fields that are stored as string中所述自行进行操作,但这可能会很慢。

我建议您确保应用程序将数字存储为int/long/float,并编写一个脚本来遍历所有文档并更新值。我还建议您在https://jira.mongodb.org/browse/SERVER上添加一个功能请求,以添加一个将字符串转换为数字的运算符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接