2014-10-20 84 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

請注意,此方法也適用於遞減值;只需傳遞一個負值即可。