アトミック性と分離に関する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 })