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(这也会影响多个文档)。

其次,在 atomic 页面上观看Update if Current策略。它清楚地表明,如果条件适用,则会发生更新,并且两者之间不会发生任何事情。

于 2012-02-08T19:11:18.757 回答