Монгольская документация по атомарности и изоляции немного туманна и немного запутанна. У меня есть эта структура документа, и я хочу, чтобы 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 })
Не знаю, как я пропустил эту страницу в документации, но это прекрасный пример, thx – raffian