从文档中求和

时间:2019-03-19 19:15:47

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

在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}

1 个答案:

答案 0 :(得分:1)

您需要$objectToArray运算符来汇总来自“未知”键的数据,然后可以将此值传递给$sum运算符,因为function repairAndRelaunch (cnt) { // capture current secs var secs = (new Date()).getSeconds(); // relaunch with corrected seconds - limit iterations for testing if (5 > cnt++) setTimeout('repairAndRelaunch(' + cnt + ')', (60-secs)*1000); // log to observe discrepencies console.log('for cnt = ' + cnt + ', secs = ' + secs); }; // test control flow window.onload = function() {repairAndRelaunch(0);}; 下将有一个数字数组。 $let在此处用于定义一个临时变量,然后可以将其传递给xled.v函数

$sum

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

相关问题