MongoDB - 合并更新

时间:2015-08-09 16:32:24

标签: python mongodb merge pymongo insert-update

我在更新MongoDB文档时遇到了一些问题(使用pymongo)。我找到了几个类似问题的答案,这些问题对我来说都没有用。

背景:我正在抓取一些网站并将信息保存到MongoDB。

假设我从网页获得以下文档并存储在MongoDB集合中:

original_doc = {
    'id': some_id,
    'data': {
        'key1': value1,
        'key2': value2
    }
}

一段时间后,我可能想再次抓取同一页面并获取以下文档:

new_doc = {
    'id': some_id,
    'data': {
        'key2': new_value2,
        'new_key3': new_value3
    }
}

现在我想更新集合中已有的MongoDB文档,如下所示:

updated_doc = {
    'id': some_id,
    'data': {
        'key1': value1,
        'key2': new_value2,
        'new_key3': new_value3
    }
}

所以基本上旧文档应该被新文档覆盖,但不会删除/丢失原始文档中的数据,这在新文档中是不存在的。

我首先想到我可以使用$ set来更新文档,但是(key1,value1)条目会丢失。我不知道新条目的关键因为我无法控制网站返回的数据,所以我不能只使用{$ set:{data.new_key3:new_doc}}。

有解决方法吗?

1 个答案:

答案 0 :(得分:1)

您应该使用_id as selector来更新文档。查询将类似于以下查询...

db.collection.update({"_id" : ObjectId("55c789499dd5f5f78633da59") //add mongoId to match here},
{ $set:{"data.key2":"new_value2","data.new_key3":"new_value3"}})

此查询将使用新数据更新现有文档。 mongoId将与旧文档相同