关于Mongodb:原子获取和设置

关于Mongodb:原子获取和设置,mongodb,atomic,Mongodb,Atomic,我是Mongodb初学者,我有这样一个文档: { "_id": "abc", "names": { "1" : "name1", "2" : "name2", "3" : "name3" } } 我想使用多线程添加'name4','name5','nameX'。。。“名字” 我的方式: 步骤1:获取所有名称 步骤2:在名称中添加'nameN'(名称[n]='nameN') 步骤3:设置新名称 我知道这不是原子-u-!!

我是Mongodb初学者,我有这样一个文档:

{
    "_id": "abc",
    "names": {
        "1" : "name1",
        "2" : "name2",
        "3" : "name3"
    }
}
我想使用多线程添加'name4','name5','nameX'。。。“名字”

我的方式:

  • 步骤1:获取所有名称
  • 步骤2:在名称中添加'nameN'(名称[n]='nameN')
  • 步骤3:设置新名称
我知道这不是原子-u-!!所以我的问题是如何使它原子化

我的另一种方式: 在文档中添加“版本”字段,当获得结果时,记录“版本”,然后用“版本”设置“名称”,如:

update_one({"_id": "abc", "version": currentVersion}, {$set: {"names": newNames}}) 
如果与“版本”不匹配,则更新失败,新的“名称”将不会添加到文档中。我希望它随时都能成功


有人能帮我吗?谢谢

MongoDB只保证文档级别的事务


对于您的需求,您必须使用线程同步来保证应用程序级别的原子性。

names
是一个对象而不是数组。所以你不能用'names[n]='nameN'@Siddharth Ajmera谢谢,我用的是pymongo客户端