在更新一系列嵌入式文档猫鼬中的字段时出现问题?

时间:2019-10-10 08:55:26

标签: mongodb mongoose mongodb-query mongoose-schema

当前我的用户模型如下:

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

update isbn field of book object whose _id matches with req.params.id进行一次findOneAndUpdate查询后:

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 个答案:

答案 0 :(得分:1)

您需要使用位置$ operator仅更新与查询匹配的元素。

示例:

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