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