Является ли функция find_one_and_update() в pymongo атомной?

#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? Меня беспокоило, что кто-то другой может изменить документ между шагом фильтра/запроса и шагом обновления, и я не уверен, что функция PyMongo find_one_and_update() напрямую преобразуется в findOneAndUpdate . (Не стесняйтесь написать это в качестве ответа, чтобы я мог его принять.)