gpt4 book ai didi

java - 如何聚合 mongodB 集合中所有文档的映射键?

转载 作者:行者123 更新时间:2023-12-02 09:10:42 25 4
gpt4 key购买 nike

我有以下格式的数据:

[{
"OrderId": "406-5309498-5972326",
"revenueHeader": {
"Principal": 982.14,
"Product Tax": 117.86,
"Total": 1100
}},
{
"OrderId": "506-5234568-5934567",
"revenueHeader": {
"Principal": 382.54,
"Product Tax": 34.46,
"Shipping charge": 30.5,
"Giftwrap charge": 27.5,
"Total": 234
}}]

如何对所有文档中的键的 RevenueHeader 映射值求和?注意:第一个文档中不存在“运费”,但我们仍然需要所有文档中此键的总和。此外,按键可能会有所不同,无法事先知道按键的名称。

最佳答案

您必须使用$objectToArray将 RevenueHeader 转换为 {k,v} 对象数组。

然后,您可以 $unwind 数组,并按 RevenueHeader.k 分组,对 RevenueHeader.v 求和。通过这种方式,您无需关心 RevenueHeader 中的字段名称或存在。

这是查询:

db.collection.aggregate([
{
$project: {
revenueHeader: {
$objectToArray: "$revenueHeader"
}
}
},
{
$unwind: "$revenueHeader"
},
{
$group: {
_id: "$revenueHeader.k",
total: {
$sum: "$revenueHeader.v"
}
}
}
])

你可以测试一下here

关于java - 如何聚合 mongodB 集合中所有文档的映射键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59446154/

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