2016-02-24 52 views
0

我有这个数据库中的更新前:

{'id': 1, 'updating_this': 'a', 'removing_this': 'x'} 

现在我打电话更新:

item = {'id': 1, 'updating_this': b'} 
bulk.find({'id': item['id']}).update({'$set': item}) 

我所得到的结果是:

{'id': 1, 'updating_this': 'b', 'removing_this': 'x'} 

我想要的结果:

{'id': 1, 'updating_this': 'b'} 

所以基本上我想要update命令删除所有缺少的字段,而不用$ unset操作指定它们,也就是完全覆盖文档。

我该如何解决这个问题?

更新得到了与replace_one()

回答

0

这个工作你应该直接在收集使用update$set

item = {'id': 1, 'updating_this': b'} 
bulk.update({'id': item['id']}, item) 

https://docs.mongodb.org/manual/reference/method/db.collection.update/#replace-a-document-entirely

+0

'ValueError异常:更新仅$ operators'这个作品不与'批量工作写Operations'。我发现'replace_one'操作符可以完成它的工作,所以对于我来说这个问题得到了解答。尽管如此,感谢您的努力。 –

+0

该错误来自mongodb的旧版本。链接的文档支持所提供的语法。 – autodidacticon

+0

我在3.2.1以及最新的pymongo模块。 –