0

アトミック性と分離に関するMongoのドキュメントは、少し曖昧で少し混乱しています。私はこのドキュメント構造を持っており、mongoが更新を処理し、更新をさまざまなユーザーから分離するようにしたいです。

製品割引オファーのコレクションを想定します。ユーザーがオファーを引き換えると、offers_redeemedフィールドがインクリメントされます。このmax_allowed_redemptionsフィールドは、オファーを引き換えることができる回数を制御します。

{ 
     offer_id: 99,
     description: “Save 25% on Overstock.com…” 
     max_allowed_redemptions: 10,
     offers_redeemed: 3
}

私はこれを使用してテストしましfindAndModifyたが、別の償還が許可されている最大額以下の場合にのみ、オファーを更新することで機能するようです。これが正しい方法であるかどうか、そしてこれがマルチユーザーのシャード環境で機能するかどうかを知りたいです。の更新offers_redeemedによって強制的に超過するシナリオはありますmax_allowed_redemptionsか?、明らかに、それはレコードを破壊するので、それを避ける必要があります。

db.offer.findAndModify({
   query:{ offer_id: 99, $where: “this.offers_redeemed + 1 <= this.max_allowed_redemptions”},
   update: {$inc: {offers_redeemed: 1},
   new: true })
4

1 に答える 1

2

まず、ドキュメントが非常に明確に述べているように

ドキュメントを返す必要がない場合は、Update を使用できます (複数のドキュメントにも影響する可能性があります)。

次に、アトミック ページでUpdate if Current戦略を確認します。条件が適用される場合、更新が行われ、2 つの間に何も来ないことが明確に示されています。

于 2012-02-08T19:11:18.757 に答える