将值移出对象

时间:2018-12-18 09:17:53

标签: python arrays python-3.x mongodb aggregation-framework

我有一个看起来像这样的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聚合。

2 个答案:

答案 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的速度应该更快。