2014-10-20 59 views
0

我想在MongoDB上模拟一个事务,并想知道是否有更好的解决方案。我有一个数组内的文档。我想增加这个值。但是,如果同时另一个用户选择具有相同值的文档,将导致错误的数据。必须等到更新解决为止,并且只有在另一个用户可以请求该文档并且他也增加了这个文件之后。 任何消化?MongoDB - 模拟交易

Thankyou

+1

我建议你阅读**“模仿事务行为” ** **从“MongoDB的应用设计模式” **和你的情况,你可以阅读**“乐观更新本书的补偿'**部分 – Disposer 2014-10-20 13:24:29

回答

1

你应该让mongo处理这些并发问题。它知道如何处理这样的情况,每次更新都是原子的。

而不是提交要更新的实际值,您可以只指定要增加的数量。我会建议使用适当的操作员让mongo完成它的工作。如果你所做的只是一个值的增量,你可以使用$inc operator

从链接的文档摘自:

$inc操作者通过一个指定的值递增一个字段,并具有以下形式:

{ $inc: { <field1>: <amount1>, <field2>: <amount2>, ... } } 

要嵌入的文档中或者在一个阵列指定,请使用dot notation

请注意,此方法也适用于递减值;只需传递一个负值即可。