如何更新mongodb数组项没有竞争条件?
我有一个更新查询,certificate是受竞争条件,但我不知道为什么。
假设我在MongoDB中有一个stuff
集合。 为了清晰起见,我使用了数字ID。
stuff: { _id: 123 elements: [ { _id: 456, value: 'foo', }, { _id: 789, value: 'bar' }, ] }
现在我想更新123下的element
456的值。
我认为这是好的(我使用mongoose,因此Stuff
类):
Stuff.update( { _id: 123, 'elements._id': 456 }, { $set: { 'elements.$': { _id: 456, value: 'foobar', something: 'else', } } } )
然而,这个查询似乎受竞争条件的影响。 我不能解释为什么,但我可以certificate,并行解雇这个请求会弄乱我的数据。 特别是如果我尝试同时更新元素456
和789
。
- 是否有一个全面的原因,为什么这会造成麻烦?
- 有没有办法来解决这个问题,所以它变得兼容certificate?
谢谢 !
PS:如果有任何相关性,我使用mongoose