gpt4 book ai didi

mongodb - 如何汇总 MongoDB 子文档中的每个字段?

转载 作者:IT老高 更新时间:2023-10-28 13:24:47 24 4
gpt4 key购买 nike

我在 MongoDB 中使用 db.collection.aggregate 时遇到问题。

我有一个像这样的数据结构:

_id:...

Segment:{
"S1":1,
"S2":5,
...
"Sn":10
}

Segment 中的含义如下: 我可能有几个带有数值的子属性。我想把它们总结为 1 + 5 + .. + 10

问题是:我不确定子属性名称,因为每个文档的段号都不同。所以我不能列出每个段的名称。我只想使用类似 for 循环的东西将所有值加在一起。

我试过这样的查询:

db.collection.aggregate([

{$group:{
_id:"$Account",

total:{$sum:"$Segment.$"}
])

但它不起作用。

最佳答案

您犯了一个经典的错误,即使用任意字段名称。 MongoDB 是“无模式的”,但这并不意味着您不需要考虑您的模式。键名应该是描述性的,在你的情况下,f.e. “S2”实际上没有任何意义。为了执行大多数类型的查询和操作,您需要重新设计架构以存储数据,如下所示:

_id:...
Segment:[
{ field: "S1", value: 1 },
{ field: "S2", value: 5 },
{ field: "Sn", value: 10 },
]

然后您可以像这样运行查询:

db.collection.aggregate( [
{ $unwind: "$Segment" },
{ $group: {
_id: '$_id',
sum: { $sum: '$Segment.value' }
} }
] );

然后结果是这样的(您问题中的唯一文件):

{
"result" : [
{
"_id" : ObjectId("51e4772e13573be11ac2ca6f"),
"sum" : 16
}
],
"ok" : 1
}

关于mongodb - 如何汇总 MongoDB 子文档中的每个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17661461/

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