У меня есть коллекция, структура документа выглядит так:
{
"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