【问题标题】:Summing Values From a Document对文档中的值求和
【发布时间】:2019-03-19 19:15:46
【问题描述】:

在 MongoDB 4 中,我正在使用一个集合,该集合包含一个包含数字的文档文档。我想总结所有这些数字。

查询现在刚刚吐出完整文档的查询:

db.metadata.aggregate([  
   {  
      $match:{  
         "download-md5-checksum":"419f21233097c5f7bcd937a2c94b8032"
      }
   },
   {  
      $group:{  
         _id:"$xled.xled-bad-counts",
         count:{  
            $sum:1
         }
      }
   },
   {  
      $project:{  
         "xled.xled-bad-counts":"$_id",
         count:1,
         _id:0
      }
   }
]).pretty()

{
    "count" : 1,
    "xled" : {
        "xled-bad-counts" : {
            "left-engine-accessory-gearbox-count" : 7,
            "left-engine-accessory-gearbox-minimum" : 2,
            "left-engine-accessory-gearbox-maximum" : 2,
            "left-engine-accessory-gearbox-total" : 3
        }
    }
}

我知道$sum 函数,但我相信它想作用于一个数组,但是我的数据被安排为一个文档文档。

如何使用 MongoDB shell 命令正确聚合并执行求和?我希望我的输出只是

{count: 453}

【问题讨论】:

    标签: arrays mongodb mongodb-query aggregation-framework mongo-shell


    【解决方案1】:

    您需要$objectToArray 运算符来聚合来自“未知”键的数据,然后您可以将此值传递给$sum 运算符,因为xled.v 下会有一个数字数组。 $let在这里用来定义一个临时变量,然后可以传递给$sum函数

    db.metadata.aggregate([
        {  
            $project:{  
                _id: 0,
                count: {
                    $let: {
                        vars: { xled: { $objectToArray: "$xled.xled-bad-counts" } },
                        in: { $sum: "$$xled.v" }
                    }
                }
            }
        }
    ]).pretty()
    

    输出:{ "count" : 453 }

    【讨论】:

    • 谢谢!我确实仍然需要$match 信息,但它有效:db.metadata.aggregate([ { $match:{ "download-md5-checksum":"419f21233097c2f7bbd937c2c94b8032" } }, { $project:{ _id: 0, count: { $let: { vars: { xled: { $objectToArray: "$xled.xled-bad-counts" } }, in: { $sum: "$$xled.v" } } } } } ]).pretty()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 2021-06-12
    • 1970-01-01
    • 2011-06-05
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多