Как бороться с пользователями, обновляющими тот же документ MongoDB - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть приложение Mean Stack с несколькими пользователями, которые будут использовать приложение одновременно.Я не беспокоюсь о том, что произойдет, если они обновят документ в одно и то же время, потому что MongoDB занимается этим.Моя проблема связана с тем, что

  1. Пользователь 1 загружает документ
  2. Пользователь 2 загружает документ
  3. Пользователь 1 обновляет документ
  4. Пользователь 2 обновляет документ 10секунд спустя

В этом случае пользователь 2 никогда не увидит обновленную версию документа.Является ли лучший способ справиться с этим, отправив оригинальную версию документа в запросе, чтобы увидеть, изменился ли он, и вернуть ошибку, если она есть?

1 Ответ

0 голосов
/ 11 декабря 2018

Я новичок в MongoDB и только начинаю его исследовать.У меня также есть этот вопрос, и я думаю, что у меня есть решение, хотя я все еще должен протестировать с некоторым кодом.

Создайте поле контроля версий в своем документе.Затем:

На автономном сервере используйте db.collection.findAndModify () и запросите по _id и полю текущей версии документа.Установите upsert в false.Увеличьте поле версии в документе, который будет обновляться.

При изменении одного документа и findAndModify, и метод update () атомарно обновляют документ.

Для наборов реплик используйте Транзакции

Mongoose 5.2.0 также включает эту функцию .

Транзакции являются новыми в MongoDB 4.0и Mongoose 5.2.0.Транзакции позволяют выполнять несколько операций изолированно и потенциально отменять все операции в случае сбоя одной из них.

...