关于Mongodb:Atomic Get and Set

时间:2016-04-05 13:56:49

标签: mongodb atomic

我是Mongodb初学者,我有这样的文件:

{
    "_id": "abc",
    "names": {
        "1" : "name1",
        "2" : "name2",
        "3" : "name3"
    }
}

我想使用多线程添加'name4','name5','nameX'...来“命名”

我的方式:

  • step1:获取所有名称
  • step2:将'nameN'添加到名称(names [n] ='nameN')
  • 第3步:设置新名称

我知道这不是原子的-_- !!所以我的问题是如何制作原子?

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

update_one({"_id": "abc", "version": currentVersion}, {$set: {"names": newNames}}) 

如果与“版本”不匹配,则更新失败,新的“nameN”将不会添加到文档中。我希望它随时都能成功。

有人能帮助我吗?感谢

1 个答案:

答案 0 :(得分:2)

MongoDB仅保证文档级别的事务。

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