обновление MongoDB не ниже нуля

#mongodb #mongoose

#mongodb #mongoose

Вопрос:

Я создаю функцию реального времени для своего приложения, которая содержит набор элементов. Каждый пользователь может получить определенное количество элементов, но мне интересно, как я должен с этим справиться:

 Items left: 7
User A wants 5 items
User B wants 5 items
  

И они оба нажали кнопку в одно и то же время.
Из-за проблемы с записью / блокировкой, если я сделаю это, получит ли это только один человек? Или они оба получат это, и количество моих элементов будет равно -3 или?

 var number = 5
    .update(
        {$where : "items > number -1"},
        {$inc: {"items": -number}},
        {multi: true}
    );
  

Ответ №1:

В руководстве по MongoDB:

MongoDB позволяет нескольким клиентам считывать и записывать одни и те же данные. Для обеспечения согласованности он использует блокировку и другие меры контроля параллелизма, чтобы предотвратить одновременное изменение одной и той же части данных несколькими клиентами. Вместе эти механизмы гарантируют, что все записи в один документ выполняются либо полностью, либо не выполняются вообще, и что клиенты никогда не видят противоречивого представления данных.

Итак, MongoDB позаботится об этом.