我想找到正确的子文档并更改特定字段。
以下是我的尝试:
Book.findOneAndUpdate(
{ _id: req.params.id, chapters: { $elemMatch: { _id: req.params.subid } } },
{ $set: { chapters: { title: 'new title' } } }, { 'new': true }).exec();
});
也尝试过:
Book.findOneAndUpdate(
{ _id: req.params.id, 'chapters._id': req.params.subid },
{ $set: { 'title': 'new title' } }, { 'upsert': true }).exec();
第一个解决方案通过使用单个字段title
覆盖所有内容来删除所有内容。
如何正确更新?
修改
//Book
{
"_id": {
"$oid": "5ae2f417fe46cf86900af82f"
},
"chapters": [
{
"_id": {
"$oid": "5af1b798be6bb05e4427ee65"
},
"title": "old title",
"something": "something"
},
//..some more
]
}
答案 0 :(得分:2)
类似的东西:
const ObjectID = require('mongodb').ObjectID;
var bookId = new ObjectID(req.params.id),
subId = new ObjectID(req.params.subid);
Book.findOneAndUpdate(
{ _id: bookId, chapters: { $elemMatch: { _id: subId } } },
{ $set: { chapters: { title: 'new title' } } }, { 'new': true }).exec();
});
答案 1 :(得分:2)
认为您需要使用位置运算符$
info
Book.findOneAndUpdate(
{ _id: req.params.id, 'chapters._id': req.params.subid },
{ $set: 'chapters.$': { 'title': 'new title' } }).exec();
或者只更新title
Book.findOneAndUpdate(
{ _id: req.params.id, 'chapters._id': req.params.subid },
{ $set: 'chapters.$.title': 'new title'}).exec();