我在更新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}}。
有解决方法吗?
答案 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将与旧文档相同。