Как обновить более одного поля во вложенном документе? - PullRequest
0 голосов
/ 14 сентября 2018
{
   movies: [
          {
            _id,
            title,
            rating
          }
        ]
}

Я хочу обновить заголовок или рейтинг или оба, только если существует.

мой запрос должен выглядеть примерно так

Movies.findOneAndUpdate('movies._id': movieId, { 
   movies.$.rating: rating, 
   movies.$.title: title 
});

Но он не поддерживает множественные позиционные операторы.

Возможное решение, которое я думал, было отправить объект фильма целиком изамените его на

Movies.findOneAndUpdate('movies._id': movieId, { 
       movies.$: movie 
    });

Я не хочу заменять весь объект или не хочу отправлять весь объект фильма с внешнего интерфейса.

Пожалуйста, предоставьте мне оптимизированное решение.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018
Movies.findOneAndUpdate({'movies._id': movieId},{$set:{title:req.body.title}} { 
   movies.$: movie 
});
0 голосов
/ 14 сентября 2018

Вы можете сделать это с помощью фильтров массива https://jira.mongodb.org/browse/SERVER-1243

 db.movies.update(
        {}, 
        {$set: {“movies.$[i].title”: "newTitle", “movies.$[i].rating”: 4}}, 
{arrayFilters: [{i._id: "movieId"}]}}
       )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...