课程架构
Course
name: String,
code: String,
sections: [
reference: Number,
professor: String,
students: [
id: ObjectId
]
]
有很多课程,每个课程都有很多部分,每个课程都有很多学生。
假设用户的输入是数据库中存在的一组参考值,那么我如何才能按引用查找部分并将用户的ID添加到students数组中?
这是我目前拥有的,但是它不起作用,并且我也没有收到任何错误:
Course.update(
{ sections: { $elemMatch: { reference: references[i] } } },
{ $addToSet: { students: userId } },
{ new: true, upsert: true },
function (err, sectionAdded) {
if (err) {
console.error('saving references error');
return res.status(500).send({ message: 'saving references error' });
}
});
答案 0 :(得分:0)
您可以使用$elemMatch
通过一系列嵌入式文档进行查找:
Course.static({
findOneBySectionReferences (references) {
return this.findOne({
sections : {
$elemMatch : {
reference : {$in : references}
}
}
});
}
})
function addUserId (userId, references) {
return (
Course.findOneBySectionReferences(references).exec()
.then((course) => {
course.sections.forEach((section) => {
references.forEach((reference) => {
if (section.reference === reference) {
section.students.push({id : userId});
}
});
});
return course.save();
})
);
}
addUserId(userId, references)
.then((updatedCourse) => {
console.log('Updated');
});