【问题标题】:MongoDB - Aggregate SumMongoDB - 总和
【发布时间】:2013-08-09 01:16:02
【问题描述】:

我正在尝试计算在我们的数据库中进行跟踪所花费的总金额。每个订单文档都包含一个字段“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 聚合函数的限制吗?如果有,有什么替代品吗?
  • 浮点确实可以工作;你确定你的集合中的值真的是浮点数而不是字符串吗?如果它们是字符串,您确实会看到零结果。
  • @drmirror 我刚刚发现这一点,感谢您的提醒,它们都存储为字符串。有什么方法可以在聚合查询中快速将它们转换为浮点数?

标签: mongodb aggregation-framework


【解决方案1】:

$sum 仅适用于整数、长整数和浮点数。目前,没有运算符可以将字符串解析为数字,尽管这非常有用。您可以按照Mongo convert all numeric fields that are stored as string 中的说明自行执行此操作,但这会很慢。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    相关资源
    最近更新 更多