Проблема обновления полей в массиве вложенных документов Mongoose? - PullRequest
0 голосов
/ 10 октября 2019

В настоящее время моя модель User выглядит следующим образом:

{
  _id: 'SomeId'
  firstName: 'John',
  lastName: 'Cena',
  book: [{_id:'xyz',title: 'a', author:'b', isbn:'10' },{_id:'abc',title: 'c', author:'d', isbn:'12' }]
}

После выполнения запроса findOneAndUpdate для update isbn field of book object whose _id matches with req.params.id:

router.post('/update_book/:id', (req, res) => { 
  User.findOneAndUpdate({'book._id':req.params.id},{book: {isbn: '15'} }, {new: true,'book.$': 
  1}).select('book').exec((err,doc)=>{
  console.log(doc);
  }
});

После кода выше моя коллекция выглядит следующим образом:

{
  _id: 'SomeId'
  firstName: 'John',
  lastName: 'Cena',
  book: [{isbn:'15' }]
} 

Фактически удаляет все другие объекты книги, а также удаляет другие поля соответствующего объекта книги. Пожалуйста, помогите мне правильно написать findOneAndUpdate запрос!

1 Ответ

1 голос
/ 10 октября 2019

Вам необходимо использовать позиционный оператор $ , чтобы обновить только элемент, соответствующий запросу.

Пример:

User.findOneAndUpdate({'book._id':req.params.id}, {'book.$.isbn': '15'}...
...