gpt4 book ai didi

mongodb - 当父元素在每条记录中具有不同名称时,选择 mongodb 集合中的子元素

转载 作者:行者123 更新时间:2023-12-03 02:46:35 25 4
gpt4 key购买 nike

我的 mongodb 集合有以下 json 格式,其中我需要选择子元素来执行计算,但父元素每条记录中都有不同的名称

distribution is the parent element and 5d39e82f9ab1 and 5d09f133 are the variable child elements in each record.

{"distribution" : {
"5d39e82f9ab1" : {
"id" : "5cfa18a",
"name" : "Test1",
"feeTarget" : "5d39e82",
"onBoardAgent" : {
"debit" : 0,
"credit" : 0
},
"transAgent" : {
"debit" : 0,
"credit" : 0
},
"redeemAgent" : {
"debit" : 0,
"credit" : 0
},
"merchant" : {
"debit" : 0,
"credit" : 0
},
"system" : {
"debit" : 0,
"credit" : 0
},
"aggregator" : {
"debit" : 0,
"credit" : 0
},
"distributor" : {
"debit" : 0,
"credit" : 0
}
}
}
}


{"distribution" : {
"5d09f133" : {
"id" : "5d09f133",
"name" : "test2",
"feeTarget" : "5d09f133",
"onBoardAgent" : {
"debit" : 0,
"credit" : 0
},
"transAgent" : {
"debit" : 0,
"credit" : 28
},
"redeemAgent" : {
"debit" : 0,
"credit" : 0
},
"merchant" : {
"debit" : 0,
"credit" : 0
},
"system" : {
"debit" : 0,
"credit" : 7
},
"aggregator" : {
"debit" : 0,
"credit" : 0
},
"distributor" : {
"debit" : 0,
"credit" : 0
}
}
}
}

我想选择并执行如下操作:

以下是可能的查询:

"$project" : {
"distribution.*.onBoardAgent" : 1,
Difference: { $subtract: [ "$distribution.*.onBoardAgent.debit", $distribution.*.onBoardAgent.debit" ] }
}
},

这里“*”是我每个集合中的变量名称。

最佳答案

MongoDB 中没有 "*" 语法。要动态遍历 BSON 文档,您需要使用 $objectToArray$arrayToObject运营商。第一个运算符返回一个键值对数组,因此您必须使用 $map转换您的嵌套对象

db.collection.aggregate([
{
$addFields: {
distribution: {
$arrayToObject: {
$map: {
input: { $objectToArray: "$distribution" },
as: "dist",
in: {
k: "$$dist.k",
v: {
onBoardAgent: "$$dist.v.onBoardAgent",
difference: { $subtract: [ "$$dist.v.onBoardAgent.debit", "$$dist.v.onBoardAgent.credit" ] }
}
}
}
}
}
}
}
])

Mongo Playground

关于mongodb - 当父元素在每条记录中具有不同名称时,选择 mongodb 集合中的子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59115127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com