Документация 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 })