更新嵌入式文档 Mongoose 数组中的字段时出现问题?
Issue in updating fields in an array of embedded documents Mongoose?
目前我的用户模型如下所示:
{
_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);
}
});
在上面的代码之后我的 collection 看起来像:
{
_id: 'SomeId'
firstName: 'John',
lastName: 'Cena',
book: [{isbn:'15' }]
}
它实际上删除了所有其他书籍 object 并且还删除了匹配书籍 object 的其他字段。请帮助我正确编写 findOneAndUpdate
查询!
您需要使用位置 $ operator 来仅更新与查询匹配的元素。
示例:
User.findOneAndUpdate({'book._id':req.params.id}, {'book.$.isbn': '15'}...
目前我的用户模型如下所示:
{
_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);
}
});
在上面的代码之后我的 collection 看起来像:
{
_id: 'SomeId'
firstName: 'John',
lastName: 'Cena',
book: [{isbn:'15' }]
}
它实际上删除了所有其他书籍 object 并且还删除了匹配书籍 object 的其他字段。请帮助我正确编写 findOneAndUpdate
查询!
您需要使用位置 $ operator 来仅更新与查询匹配的元素。
示例:
User.findOneAndUpdate({'book._id':req.params.id}, {'book.$.isbn': '15'}...