Mongoose: findOneAndUpdate с помощью findAndModify

Созданный на 10 июл. 2016  ·  3Комментарии  ·  Источник: Automattic/mongoose

Почему метод findOneAndUpdate использует под капотом findAndModify вместо findOneAndUpdate ?

Мне нужно передать настройки проекции, но это не работает, потому что findAndModifiy не принимает такие параметры и поэтому возвращает весь документ.

Например:

Product
      .findOneAndUpdate({
        _id: productId,
      }, {
        $push: {colors: data},
      }, {
        projection: {
          name: 1, 'colors.$': 1,
        },
        returnNewDocument: true,
      })

Самый полезный комментарий

Да, здесь есть небольшая путаница, потому что каждый API хочет быть своей собственной особой снежинкой :) Теперь, когда драйвер mongodb добавил функцию findOneAndUpdate() , у которой есть свои особенности, еще не совсем уверен, как поступить с FineOneAndUpdate( )

Все 3 Комментарий

Потому что findOneAndUpdate() мангуста задолго до существования findOneAndUpdate() в базовом драйвере mongodb, а findOneAndUpdate() драйвера в любом случае является лишь тонкой оболочкой вокруг findAndModify . Кроме того, findOneAndUpdate() драйвера имеет несколько причудливую семантику, особенно связанную с опцией new и разницей между new и returnNewDocument , которые неприятны для мангуста.

Проекции не работают - это небольшая проблема. Попробуйте использовать «поля» вместо «проекции», потому что это имя использует базовая функция findAndModify

Спасибо за разъяснения. Да, я заметил некоторые странные различия в именах, например, fields против projection и new против returnNewDocument .

Да, здесь есть небольшая путаница, потому что каждый API хочет быть своей собственной особой снежинкой :) Теперь, когда драйвер mongodb добавил функцию findOneAndUpdate() , у которой есть свои особенности, еще не совсем уверен, как поступить с FineOneAndUpdate( )

Была ли эта страница полезной?
0 / 5 - 0 рейтинги