关于 Mongodb:原子获取和设置
About Mongodb: Atomic Get and Set
我是 Mongodb 初学者,我有这样的文档:
{
"_id": "abc",
"names": {
"1" : "name1",
"2" : "name2",
"3" : "name3"
}
}
我想使用多线程添加 'name4'、'name5'、'nameX'... 到 "names"
我的方式:
- 第一步:获取所有名称
- step2 : 添加 'nameN' 到名称 (names[n]='nameN')
- 第 3 步:设置新名称
我知道这不是原子的-_-!!所以我的问题是如何使其原子化?
我的另一种方式:
在文档中添加一个 'version' 字段,当获取结果时,记录 'version',然后将 'names' 设置为 'version',例如:
update_one({"_id": "abc", "version": currentVersion}, {$set: {"names": newNames}})
如果不匹配'version',更新失败,新的'nameN'将不会添加到文档中。我希望它随时都能成功。
有人可以帮助我吗?谢谢
MongoDB只保证文档级别的交易。
根据您的要求,您必须使用线程同步来保证应用程序级别的原子性。
我是 Mongodb 初学者,我有这样的文档:
{
"_id": "abc",
"names": {
"1" : "name1",
"2" : "name2",
"3" : "name3"
}
}
我想使用多线程添加 'name4'、'name5'、'nameX'... 到 "names"
我的方式:
- 第一步:获取所有名称
- step2 : 添加 'nameN' 到名称 (names[n]='nameN')
- 第 3 步:设置新名称
我知道这不是原子的-_-!!所以我的问题是如何使其原子化?
我的另一种方式: 在文档中添加一个 'version' 字段,当获取结果时,记录 'version',然后将 'names' 设置为 'version',例如:
update_one({"_id": "abc", "version": currentVersion}, {$set: {"names": newNames}})
如果不匹配'version',更新失败,新的'nameN'将不会添加到文档中。我希望它随时都能成功。
有人可以帮助我吗?谢谢
MongoDB只保证文档级别的交易。
根据您的要求,您必须使用线程同步来保证应用程序级别的原子性。