gpt4 book ai didi

python - MongoDB 按特定字段从数组中的对象聚合到对象

转载 作者:行者123 更新时间:2023-12-01 09:16:01 27 4
gpt4 key购买 nike

我想转换这种类型的文档(数组中的对象):

[{"name": "david", "props": {"prop1": {"AR": 9, "NY": 8}, "prop2": 
{"AR": 10, "NY": 9}}},
{"name": "john", "props": {"prop1": {"AR": 7, "NY": 8}, "prop2": {"AR":
8, "NY": 9}}}]

进入这个(按“AR”字段过滤):

{"david": {"prop1": 9, "prop2": 10}, "john": {"prop1": 7, "prop2": 8}}

使用 MongoDB 聚合。有什么想法吗?

最佳答案

有两个非常有用的运算符:$objectToArray它将对象转换为 k-v 对和 $arrayToObject 的数组它将数组转换回对象。所以你应该使用第一个, reshape 你的对象,然后使用第二个。所以有一个这样的文档:

{ 
array: [
{"name": "david", "props": {"prop1": {"AR": 9, "NY": 8}, "prop2": {"AR": 10, "NY": 9}}},
{"name": "john", "props": {"prop1": {"AR": 7, "NY": 8}, "prop2": {"AR": 8, "NY": 9}}}
]
}

您可以使用以下聚合:

db.col.aggregate([
{
$project: {
output: {
$arrayToObject: {
$map: {
input: "$array",
as: "doc",
in: {
k: "$$doc.name",
v: {
$arrayToObject: {
$map: {
input: { $objectToArray: "$$doc.props" },
as: "prop",
in: { k: "$$prop.k", v: "$$prop.v.AR" }
}
}
}
}
}
}
}
}
}
])

哪些输出:

{ "_id" : ..., "output" : { "david" : { "prop1" : 9, "prop2" : 10 }, "john" : { "prop1" : 7, "prop2" : 8 } } }

关于python - MongoDB 按特定字段从数组中的对象聚合到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51246163/

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