Mongodb читать и обновлять документ, без блокировки - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть коллекция, структура документа выглядит так:

{
  "car": 1,
  "user": 1,
  "items": [
    {
      "prop1": "text1",
      "prop2": "text2"
    },
    {
      "prop1": "text1",
      "prop2": "text2"
    }
  ],
  "totalItems": 2,
  "totalDesired": 10,
  "totalMissing": 8
}

Фронтальное приложение отправляет назад приложению 1 элемент за раз.Запрос выглядит так:

{
  "car": 1,
  "user": 1,
  "item": {
    "prop1": "text1",
    "prop2": "text2"
  }
}

Коллекция имеет индекс, состоящий из (автомобиль, пользователь).Мне нужно, чтобы каждый запрос одного и того же пользователя увеличивал массив «items», чтобы сохраненный документ содержал все элементы, отправленные пользователем, и немного обобщенных данных.Этот элемент может содержать до 10 элементов.

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

Это система чата после отправки пользователем сообщения.ответить (используя Enter) на запрос, если этот элемент отправляется в бэкэнд API.

Мне нужно отправлять после каждого ответа, потому что пользователь может покинуть чат, прежде чем завершить все вопросы.

Нетодновременно с одним и тем же пользователем.

Я думаю, что в этом решении:

Внутренний API будет запрашивать документ по машине / пользователю (проиндексирован) из mongodb, увеличивать элемент, суммировать и вызыватьобновление в mongodb.Итак, мне нужно 2 операции для каждого запроса пользователя, первый для получения документа и последний для обновления.

Мой вопрос:

1 - когда много пользователей обновляют документМогу ли я иметь проблемы с блокировкой?Даже автомобиль / пользователь разные?

2 - есть ли лучший вариант разрешить этот сценарий?

Я использую mongodb 4.0.4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...