【发布时间】:2018-10-22 06:02:56
【问题描述】:
我想找到正确的子文档并更改特定字段。
这是我的尝试:
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
]
}
【问题讨论】:
-
你能给我们举一个
Book项目的例子吗? -
第二种方案有什么问题?
-
@ExplosionPills 刚刚添加了
Book的例子,检查问题。 -
@Almaju Woah,实际上并没有什么问题。由于 im forEach:ing 它需要一些时间来完全更新它,所以当页面加载时,我没有看到新结果,因为我认为它还没有完成。但再次刷新后,我确实看到了变化。谢谢你的评论,那时我不会注意到它。顺便说一句,我记得读过一些关于异步/等待的东西。这会解决这个小问题,让它等待加载直到完全完成吗?
-
@ipid 是的,你可以问另一个问题
标签: javascript node.js mongodb express mongoose