Ответ 1
Вам нужно установить опцию в запросе useFindAndModify
в false
, как упомянуто в документации.
(ключевое слово поиска В настоящее время поддерживаются следующие варианты)
'useFindAndModify': по умолчанию true. Установите в false, чтобы findOneAndUpdate() и findOneAndRemove() использовали встроенную функцию findOneAndUpdate() вместо findAndModify().
и если вы видите файл определения mongoose, где упоминается, что он вызывает команду updateAndModify update.
/**
* Issues a mongodb findAndModify update command.
* Finds a matching document, updates it according to the update arg,
passing any options,
* and returns the found document (if any) to the callback. The query
executes immediately
* if callback is passed else a Query object is returned.
*/
findOneAndUpdate(): DocumentQuery<T | null, T>;
Недавно обновленный в документации Мангуста (Нажмите здесь) для этих устаревших, где упоминалось:
Mongoose findOneAndUpdate() долго предшествует функции findOneAndUpdate() драйвера MongoDB, поэтому вместо него он использует функцию findAndModify() драйвера MongoDB.
Существует три или более способов, которыми вы можете избежать использования FindAndModify
:
- На глобальном уровне: установите для параметра значение false.
// Make Mongoose use 'findOneAndUpdate()'. Note that this option is 'true'
// by default, you need to set it to false.
mongoose.set('useFindAndModify', false);
- На уровне подключения: мы можем настроить, используя параметры подключения:
mongoose.connect(uri, { useFindAndModify: false });
- На уровне запроса:
await ModelName.findOneAndUpdate({matchQuery},
{$set: updateData}, {useFindAndModify: false});