我有一些复杂的对象模型,如下所示:
courses: [
{
"name": "Linux",
"slug": "linux",
"_id": "123213123123",
"sections": [
{
"name" : "section1",
"_id": "123123123",
"lessons": [
{
"title": "lesson1"
"content": "some content"
}
]
},
{
"name" : "section2",
"_id": "1231231444",
"lessons": [
{
"title": "lesson1"
"content": "some content"
}
]
}
]
}
]
我正在尝试使用 $push 推送到特定部分的课程,但没有成功,
我的代码:
const updatedCourse = await Course.findOneAndUpdate(
{ slug: courseSlug },
{
$push: {
'sections.lessons': { title, content, free_preview, video: videoKey },
},
},
{ new: true, useFindAndModify: false }
);
需要 mongoose 表达式的帮助以按 id 查找部分并推送到课程数组, 谢谢。
答案 0 :(得分:0)
以下代码可以帮助您,我在本地尝试过,它工作正常
const updatedCourse = await Course.findOneAndUpdate((
{ slug: courseSlug },
{
$push: {
'sections.$[el].lessons': { title, content , free_preview , video },
},
},
{
arrayFilters:[{
"el._id":"1231231444"
}]
}
)
运行上述查询后,输出如下,_id 具有 1231231444 的部分有新课
{
"name": "Linux",
"slug": "linux",
"sections": [{
"name": "section1",
"_id": "123123123",
"lessons": [{
"title": "lesson1",
"content": "some content"
}]
}, {
"name": "section2",
"_id": "1231231444",
"lessons": [{
"title": "lesson1",
"content": "some content"
}, {
"title": "title",
"content": "content",
"free_preview": false,
"video": "123"
}]
}]
}