解析一个难的 MongoDB 字段(带有多级数组)
Posted
技术标签:
【中文标题】解析一个难的 MongoDB 字段(带有多级数组)【英文标题】:Parsing a difficult MongoDB field (with multi-level array) 【发布时间】:2021-12-26 01:32:13 【问题描述】:专家您好,
我正在尝试解析一个 MongoDB 集合行,在使用 $unwind
之后,
其余字段之一如下所示:
[
"account_id": "1234",
"cities":
"cityname1":
"param1": 1,
"param2": 2
,
"account_id": "2345",
"cities":
"cityname2":
"param1": 3,
"param2": 3
,
"account_id": "3456",
"cities":
"cityname3":
"param1": 8,
"param2": 6
]
现在,我想继续解析这个字段,所以我可以提取account_id
、param1
和param2
的字段名/值,希望能总结出param1
和param2
价值观。
但是,当我尝试使用第二个 $unwind
时,我收到了那些值为“null”的字段。
我应该如何正确解析这个字段?
【问题讨论】:
“解析”是什么意思? 我的意思是成功提取每个字段的值,然后用它们进行聚合(比如求和)... 【参考方案1】:$set
使用 $objectToArray
将城市更改为数组
$unwind
展开城市数组
$group
按 account_id 和 cityname 分组,然后总结 param1 和 param2
(您只能按 account_id 或 cityname 分组,只需删除其中一个)
聚合
db.collection.aggregate([
"$set":
cities:
"$objectToArray": "$cities"
,
"$unwind": "$cities"
,
"$group":
"_id":
account_id: "$account_id",
"cityname": "$cities.k"
,
"sumOfParam1":
"$sum": "$cities.v.param1"
,
"sumOfParam2":
"$sum": "$cities.v.param2"
])
mongoplayground
【讨论】:
亲:使用“set”来排列数据以在之后展开它 = 一个好主意,mongoplayground 也会对我有很大帮助。缺点:由于某种原因,摘要不起作用,我可能需要稍微摆弄一下。如果 24 小时内没有更好的答案,我会选择此答案作为最有帮助的答案以上是关于解析一个难的 MongoDB 字段(带有多级数组)的主要内容,如果未能解决你的问题,请参考以下文章
在 Mongoose/MongoDB 的文档中过滤数组、子文档、数组、文档