Почему метод findOneAndUpdate
использует под капотом findAndModify
вместо findOneAndUpdate ?
Мне нужно передать настройки проекции, но это не работает, потому что findAndModifiy
не принимает такие параметры и поэтому возвращает весь документ.
Например:
Product
.findOneAndUpdate({
_id: productId,
}, {
$push: {colors: data},
}, {
projection: {
name: 1, 'colors.$': 1,
},
returnNewDocument: true,
})
Потому что findOneAndUpdate()
мангуста задолго до существования findOneAndUpdate()
в базовом драйвере mongodb, а findOneAndUpdate()
драйвера в любом случае является лишь тонкой оболочкой вокруг findAndModify
. Кроме того, findOneAndUpdate()
драйвера имеет несколько причудливую семантику, особенно связанную с опцией new
и разницей между new
и returnNewDocument
, которые неприятны для мангуста.
Проекции не работают - это небольшая проблема. Попробуйте использовать «поля» вместо «проекции», потому что это имя использует базовая функция findAndModify
Спасибо за разъяснения. Да, я заметил некоторые странные различия в именах, например, fields
против projection
и new
против returnNewDocument
.
Да, здесь есть небольшая путаница, потому что каждый API хочет быть своей собственной особой снежинкой :) Теперь, когда драйвер mongodb добавил функцию findOneAndUpdate()
, у которой есть свои особенности, еще не совсем уверен, как поступить с FineOneAndUpdate( )
Самый полезный комментарий
Да, здесь есть небольшая путаница, потому что каждый API хочет быть своей собственной особой снежинкой :) Теперь, когда драйвер mongodb добавил функцию
findOneAndUpdate()
, у которой есть свои особенности, еще не совсем уверен, как поступить с FineOneAndUpdate( )