【问题标题】:Mongodb Aggregation Query with $sum使用 $sum 的 Mongodb 聚合查询
【发布时间】:2015-11-13 22:46:34
【问题描述】:

我有一个名为test 的集合。我想在test 集合中存在的所有文档中获得一个密钥的总量:sal

这里是示例文档:

[
    {
    "name": "hari",
    "sal": "100",
    "status": "Y",
    "address": "Bangalore"
    },
    {
    "name": "Sam",
    "sal": "200",
    "status": "Y",
    "address": "Bangalore"
    },
    {
    "name": "Nik",
    "sal": "200",
    "status": "N",
    "address": "Bangalore"
    }
]

我尝试了以下查询:

db.getCollection('test').aggregate([{
  $match: {
    Status: "Y"
  }
}, {
$group: {
    _id: null,
    total: {
        $sum: "$sal"
    }
  }
}])

我得到了零。

谁能建议我正确的查询来在集合中的所有文档中添加特定键。

【问题讨论】:

  • 听起来你的sal 字段实际上是一个字符串,或者至少不是数字,或者不存在。
  • 您的查询乍一看似乎是正确的,但它可能不适合您的文档。请发布示例文档。
  • 嗨 Philipp,下面是一些测试集合的示例文档 ******* test { "name": "hari", "sal":"100", "status": " Y”,“地址”:“班加罗尔”} {“姓名”:“山姆”,“萨尔”:“200”,“状态”:“Y”,“地址”:“班加罗尔”} {“姓名”:“ Nik", "sal":"200", "status": "N", "address": "Bangalore" } 同时运行聚合查询 db.getCollection('test').aggregate([{$match:{status :"Y"}},{$group:{_id:null,total:{$sum:"$sal"}}}])。我的价值为零。
  • 根据您的文档结构sal 看起来像string 数据类型,所以您应该将sal 数据类型更改为Int or Float 了解更多如何转换数据类型检查this link

标签: mongodb aggregation-framework


【解决方案1】:

如示例文档中所述,

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

您可以参考以下答案以获取更多详细信息:- MongoDB - Aggregate Sum

【讨论】:

  • 使用这个 totalAmount: $group: { totalAmount: { $sum: { $multiply: [ "$sal", "$quantity" ] } } }
  • $multiply 只支持数字类型,不支持字符串
猜你喜欢
  • 2021-08-23
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 2021-09-27
相关资源
最近更新 更多