我有一个看起来像这样的mongo集合。
[{
"name": "foo",
"place": "Paris",
"other": {
"var1": "asdf",
"var2": "asdf",
"var3": "sdfw",
etc....
}
},{
"name": "Bar",
"place": "Paris",
"other": {
"var1": "asdf",
"var2": "asdf",
etc....
}
}]
我需要显示如下数据:
[{
"name": "foo",
"place": "Paris",
"var1": "asdf",
"var2": "asdf",
"var3": "sdfw",
etc...
},{
"name": "Bar",
"place": "Paris",
"var1": "asdf",
"var2": "asdf",
etc....
}]
因此,我希望除去“其他”对象,但将al的值保留在其中。 实现此目标的最佳方法是什么。 我可以使用Python3或mongo聚合。
答案 0 :(得分:4)
您可以在aggregation
以下使用$replaceRoot
和$mergeObjects
db.collection.aggregate([
{ "$replaceRoot": {
"newRoot": { "$mergeObjects": ["$other", "$$ROOT"] }
}},
{ "$project": { "other": 0 }}
])
答案 1 :(得分:2)
在Python上做到这一点在技术上是可能的,而且相当简单:
for obj in collection:
obj.update(obj.pop("other"))
但是,如Anthony Winzlet的回答所述,将它留给mongodb的速度应该更快。