Python MongoDB按特定字段从数组中的对象聚合到对象
我想转换这种类型的文档(数组中的对象): 进入此字段(按“AR”字段过滤):Python MongoDB按特定字段从数组中的对象聚合到对象,python,mongodb,aggregation-framework,Python,Mongodb,Aggregation Framework,我想转换这种类型的文档(数组中的对象): 进入此字段(按“AR”字段过滤): 使用MongoDB聚合。有什么想法吗?有两个非常有用的操作符:它将对象转换为k-v对数组,并将该数组转换回对象。所以你应该使用第一个,重塑你的物体,然后使用第二个。所以有这样一份文件: { array: [ {"name": "david", "props": {"prop1": {"AR": 9, "NY": 8}, "prop2": {"AR": 10, "NY": 9}}},
使用MongoDB聚合。有什么想法吗?有两个非常有用的操作符:它将对象转换为
k-v
对数组,并将该数组转换回对象。所以你应该使用第一个,重塑你的物体,然后使用第二个。所以有这样一份文件:
{
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 } } }
那么,您是否只需要通过MongoDB聚合解决问题?是的,只需要使用MongoDB聚合。
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 } } }