如何在没有竞争条件的情况下更新mongodb数组项?

时间:2017-06-09 14:20:13

标签: node.js mongodb atomic race-condition

我有一个更新查询,证明受到竞争条件的限制,但我不知道为什么。

我们说我在mongodb有一个stuff: { _id: 123 elements: [ { _id: 456, value: 'foo', }, { _id: 789, value: 'bar' }, ] } 集合。为了清楚起见,我使用数字ID。

element

现在,我想更新位于stuff 123下的Stuff 456上的值。

我认为这没关系(我使用的是猫鼬,因此是Stuff.update( { _id: 123, 'elements._id': 456 }, { $set: { 'elements.$': { _id: 456, value: 'foobar', something: 'else', } } } ) 类):

456

但是,此查询似乎受到竞争条件的影响。我无法解释原因,但我可以证明并行触发该请求会弄乱我的数据;特别是如果我尝试同时更新元素789和{{1}}。

  • 是否有一个全面的原因导致这会导致麻烦?
  • 有没有办法修复查询,使其成为并发证明?

谢谢!

PS:如果有任何相关性,我使用的是Mongoose

0 个答案:

没有答案