Эти три метода — это атомарные операции в MongoDB — они находят и изменяют документ в одном, неразрывном шаге, возвращая либо исходный, либо обновлённый документ.
findOneAndUpdate() — находит документ и применяет обновление (например, увеличивает поле или изменяет значение)findOneAndDelete() — находит документ и удаляет его из коллекцииfindOneAndReplace() — находит документ и полностью заменяет его новым документомfindOneAndUpdate() и findOneAndReplace() принимают опцию returnDocument со значением "after", чтобы вместо этого вернуть обновлённую версиюКогда чтение и запись выполняются отдельными шагами, другой процесс может изменить тот же документ между этими двумя операциями — это называется race condition.
Атомарные операции решают эту проблему, объединяя оба шага в один, гарантируя, что никакая другая операция не вмешается.
db.inventory.findOneAndUpdate(
{ item: "widget", stock: { $gt: 0 } },
{ $inc: { stock: -1 } },
{ returnDocument: "after" }
);
Это гарантирует, что проверка и уменьшение остатка происходят вместе, что делает операцию безопасной при конкурентной нагрузке.
Метод findOneAndUpdate() по умолчанию возвращает изменённый документ без необходимости какой-либо дополнительной конфигурации.
Новый — ещё не проверен сообществом
Вы