2012-02-08 4 views
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 }) 

ответ

2

Во-первых, как документация очень четко говорит

Если вам не нужно, чтобы вернуть документ, вы можете использовать Update (которые могут повлиять несколько документов, а).

Во-вторых, обратите внимание на стратегию Update if Current на атомной странице. Это ясно показывает, что если это условие применяется, обновление происходит, и между ними ничего не может быть.

+0

Не знаю, как я пропустил эту страницу в документации, но это прекрасный пример, thx – raffian

 Смежные вопросы

  • Нет связанных вопросов^_^