好吧,这个问题可能已经问了很多次了,但是没有一个能给我一个解决方案。
这是我的模式。
{
"_id" : ObjectId("23453453453453"),
"title": "Item 01"
"checkList" : [
{
"ch_id" : "621eff4e0ed5c751adaa42fb",
"status" : "statu",
"dateMonthYear" : 1646286480139.0,
"val" : "Gopi",
"remarks" : "Good",
"_id" : ObjectId("7555777575")
},
{
"ch_id" : "621eff4e0ed5c751adaa42fb",
"status" : "status",
"dateMonthYear" : 1646286480139.0,
"val" : "Gopi",
"remarks" : "Good",
"_id" : ObjectId("7555777575")
}
]
}
我想要做的是更新checklist数组中第二个对象的status
,我可以使用下面的查询来更新它。
const itemUpdated = await Item.updateOne(
{_id: id, 'checklist._id': req.params.id},
{$set: { "checklist.$.status": req.body.status }},
);
但是,我想使用Mongoose方法如save()
来更新这个。而不是原始查询。因为使用Mongoose方法,我得到了额外的验证层和中间件。我检查了整个互联网,但只找到了原始查询。
如何用Mongoose ORM更新数组中的嵌套对象?
2条答案
按热度按时间piwo6bdm1#
检索
Item
并循环到其checkList
,更新status
:6tqwzwtp2#
我终于找到了最适合这种情况的解决方案。我不知道为什么Mongoose文档写得这么差。
如果我们有一个子文档数组,我们可以使用Mongoose提供的id()方法获取我们需要的子文档。
这对我很有效。希望有人会觉得这有用!