Да, начиная с версии Mongoose 4.0 и выше, метод findOneAndUpdate()
больше не принимает обратный вызов как аргумент. Вместо этого, он возвращает объект Query
, который позволяет вам выполнять различные операции с помощью методов цепочки.
Вот как можно использовать новый синтаксис findOneAndUpdate()
:
const MyModel = mongoose.model('MyModel', mySchema); MyModel.findOneAndUpdate({ name: 'John' }, { age: 30 }) .then((document) => { // Объект document содержит результат обновления console.log(document); }) .catch((err) => { // Обработка ошибок console.error(err); });
В примере выше мы вызываем findOneAndUpdate()
, передавая фильтр для поиска объекта с именем «John» и обновления, которое мы хотим выполнить (изменение поля age
на 30). Затем мы вызываем метод .then()
для обработки успешного выполнения запроса и метод .catch()
для обработки ошибок, если они возникнут.
Теперь, когда findOneAndUpdate()
возвращает объект Query
, вы можете продолжать цепь методов для выполнения дополнительных операций, таких как сортировка, обновление нескольких полей и другие. Вот пример цепочки методов:
MyModel.findOneAndUpdate({ name: 'John' }, { age: 30 }) .sort('-createdAt') .limit(10) .exec() .then((documents) => { // Объект documents содержит результаты запроса console.log(documents); }) .catch((err) => { // Обработка ошибок console.error(err); });
В этом примере мы добавляем метод .sort()
для сортировки результатов по убыванию даты создания, метод .limit()
для ограничения количества возвращаемых документов до 10 и метод .exec()
для выполнения запроса. Затем мы обрабатываем результаты запроса в блоке .then()
и обрабатываем ошибки в блоке .catch()
.
Таким образом, с помощью нового синтаксиса findOneAndUpdate()
в Mongoose 4.0 и выше, вы можете выполнять более гибкие и разнообразные операции обновления данных в MongoDB.