对文档中的值求和
Summing Values From a Document
在 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}
你需要$objectToArray operator to aggregate the data from "unknown" keys and then you can pass this value to $sum operator as there will be an array of numbers under 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 }
在 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}
你需要$objectToArray operator to aggregate the data from "unknown" keys and then you can pass this value to $sum operator as there will be an array of numbers under 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 }