【问题标题】:mongoose findOneAndUpdate with $push猫鼬 findOneAndUpdate 与 $push
【发布时间】:2021-09-25 18:26:48
【问题描述】:

我有一些复杂的对象模型看起来像这样:

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

【问题讨论】:

  • 这能回答你的问题吗? Mongodb $push in nested array
  • 你想在每个部分都推送这节课吗?你能分享一下预期的输出吗?

标签: node.js mongodb express mongoose


【解决方案1】:

以下代码可以帮助您,我在本地尝试过,它工作正常

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

【讨论】:

  • 如果觉得它对您有用,您可以投票给答案。谢谢!
猜你喜欢
  • 2018-07-15
  • 2017-10-05
  • 2020-11-13
  • 2013-06-19
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 2015-10-26
相关资源
最近更新 更多