Mongo在更新单个文档时是否确保隔离?

时间:2012-02-08 19:01:44

标签: mongodb atomic isolation

关于原子性和隔离的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 })

1 个答案:

答案 0 :(得分:2)

首先,文件非常明确地说

  

如果您不需要退回文档,则可以使用更新(这也会影响多个文档)。

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