从文档中总结值

问题描述 投票:1回答:1

在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个回答
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 }

© www.soinside.com 2019 - 2024. All rights reserved.