猫鼬 findOneAndUpdate 与 $push

时间:2021-07-17 05:25:34

标签: node.js mongodb express mongoose

我有一些复杂的对象模型,如下所示:

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 查找部分并推送到课程数组, 谢谢。

1 个答案:

答案 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"
        }]
    }]
}