猫鼬,改变数组中的值

Posted

技术标签:

【中文标题】猫鼬,改变数组中的值【英文标题】: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 更改课程中的值,但它不起作用。 没有错误或任何看起来无法在数组中找到对象的东西

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

【问题讨论】:

【参考方案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

以上是关于猫鼬,改变数组中的值的主要内容,如果未能解决你的问题,请参考以下文章

使用猫鼬对数组中的值进行排序

尝试从数组中的值中删除基于 MKMap 的引脚

查询父项时如何获取猫鼬子文档数组中的值的聚合总和?

从表中的多个值中选择不在数组中的位置

如何格式化此猫鼬 updateone 查询

从数组值中过滤字典