【问题标题】:Mongoose, change value in array猫鼬,改变数组中的值
【发布时间】:2020-08-18 22:50:08
【问题描述】:

我正在尝试更新数组中的值,我尝试这样做: Mongoose, update values in array of objects

但它似乎对我不起作用:

let myLessonDB = await myLessonSchema.findById(req.params.id);

myLessonDB.update(
    { 'lessons.lesson': req.body.lessonID },
    { $set: { 'lessons.$.present': true } }
);

myLessonDB 返回:

{"_id":"5eafff00726616772ca852e2",
"lessons":[{"level":"1","present":false,"lesson":"5eb00211154ac86dc8459d6f"}],
"__v":0}

我正在尝试按所示的课程 ID 更改课程中的值,但它不起作用。
没有错误或任何看起来无法在数组中找到对象的东西

有人知道我做错了什么吗?

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:
    let myLessonDB = await myLessonSchema.findById(req.params.id);
    
    myLessonDB.lessons.map(oneLes => {
      if(oneLes.lesson == req.body.lessonID){
        oneLes.present = true;
      }
    })
    
    myLessonDB.save().then( finalLesson => {
      console.log(finalLesson);
    })
    

    【讨论】:

    • 感谢 Nayan 的回复,但这应该如何工作?你甚至没有给出课程ID?
    • 好吧,我的假设是 req.params.id 是课程 ID。如果不是这种情况,那么 findOneAndUpdate 的第一个参数将随着该查找查询而改变。第二个参数是您想要在文档中更新,第三个参数是new:true 将返回更新文档的选项。
    • 啊这样吗?让 myLessonDB = await myLessonSchema.findOneAndUpdate({_id:req.params.id, 'lessons.lesson': courseID}, {$set: { 'lessons.$.present': true }}, {new:true});
    • 这会起作用,但是因为 _id 是唯一的,所以课程.lesson:lessonID 条件没有用,Mongo 只会找到一个文档,并且单个文档具有相同的课程 ID,否则它将返回最终结果将为空。
    • 是的,但是课程是一个数组,它需要编辑该数组中的指定值,该数组使用课程ID
    猜你喜欢
    • 1970-01-01
    • 2021-04-28
    • 2019-03-22
    • 2019-09-04
    • 2016-11-05
    • 2017-04-18
    • 2021-10-17
    • 2012-12-26
    • 2019-05-23
    相关资源
    最近更新 更多