Py学习  »  MongoDB

如果MongoDB中不存在文档,则创建该文档,并自动向其添加字段[重复]

Llew Vallis • 5 年前 • 252 次点击  

这个问题已经有了答案:

我有一个叫做用户的集合。我想向该集合中添加一个用户,但如果已经存在同名用户,则该集合将失败。如果创建成功,我想用一些数据初始化它,例如密码哈希。

我不能使用如下更新upsert:

name = ...
password_hash = ...
db.users.update({ "name": name }, { "name": name, "hash": password_hash }, upsert=True)

因为这将覆盖现有用户的密码哈希。本质上,我想原子化地执行以下操作:

name = ...
password_hash = ...
if db.users.find_one({ "name": name }) is None: # Line A
    db.users.insert_one({ "name": name, "hash": password_hash }) # Line B

但是,我不能使用确切的代码,因为 name 可以在A行和B行之间添加,这意味着我将拥有两个同名用户。

我也不能用空的 upsert 然后在创建新用户的情况下添加数据,因为可以在正在创建的用户和正在添加的数据之间查询该数据。也就是说,它不是原子的。

我试过阅读其他的问题和答案 更新插入 方法不起作用),尝试过阅读文档,尝试过一般性的谷歌搜索,但没有找到任何东西。我使用的是python,所以如果你能用python写一个答案,那就很好了,但是如果你必须用另一种语言来写的话,不要避免回答。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30815
 
252 次点击  
文章 [ 1 ]  |  最新文章 5 年前