#python #mongodb #pymongo #atomic
Вопрос:
Я не смог найти никакой документации, в которой указывалось бы, что find_one_and_update()
in pymongo
является атомарным (т. Е. Между поиском и обновлением не может появиться никаких изменений в документе). Могу ли я положиться на то, что он атомарный? Или есть другой способ выполнить те же операции гарантированным атомарным способом?
Комментарии:
1. См.раздел Обновление документов — Атомарность .
2. @prasad_ Я знаю, что эта операция является атомной, если я использую ее непосредственно с MongoDB. Но так как
pymongo
это пакет python, могу ли я полагаться на то, что использование этой функции из python будет переведено в атомарный запрос в MongoDB?3. Обновление выполняется на сервере базы данных — то есть там, где оно является атомарным. Драйвер PyMongo не обновляет документ — он переводит данные/команды для конкретного языка и передает их на сервер (где это атомарная операция). Затем PyMongo получает подтверждение обновления. Драйвер, кроме того, выполняет такие функции, как обеспечение подключения к серверу, преобразование данных из/в типы клиентов в типы Bson на сервере.
4. @prasad_ Поэтому я могу предположить, что использование этой функции в PyMongo напрямую преобразуется в соответствующий
findOneAndUpdate
метод MongoDB, как описано в руководстве MongoDB? Меня беспокоило, что кто-то другой может изменить документ между шагом фильтра/запроса и шагом обновления, и я не уверен, что функция PyMongofind_one_and_update()
напрямую преобразуется вfindOneAndUpdate
. (Не стесняйтесь написать это в качестве ответа, чтобы я мог его принять.)