我的数据库包含用户,教育和课程的集合。
当服务器启动时,它应该用必要的数据填充教育,包括一个名为mandatoryCourses的数组,以及选定的课程。代码如下:
educationData.forEach((education) => {
Educations.insert({
name: education.name,
nickname: education.nickname,
mandatoryCourses: []
});
education.courses.forEach((code) => {
let course = Courses.findOne({code: code});
Educations.update({name: education.name}, {
$addToSet: {
mandatoryCourses: course
}
});
});
});
这个工作正常,除了一个细节:
课程所拥有的_id字段不在mandatoryCourses的课程条目中,但所有其他属性都在那里。检查console.log(课程)显示该课程实际上确实拥有一个_id,但它不会显示在数组条目中。
类似的操作是addCourse,其中用户将课程附加到自身。此操作非常完美,包括下面的_id代码:
let course = Courses.findOne({code: courseId});
Meteor.users.update(userId, {
$addToSet: {
courses: course
}
});
使用courseId / code是正确的。我怀疑问题在于mandatoryCourses使用的模式。作为参考,user.courses字段初始化为空数组,而mandatoryCourses定义为一系列课程,[课程]。
课程架构依次为:
Courses.schema = new SimpleSchema({
name: {
type: String,
label: "Course name"
},
code: {
type: String,
label: "Course code"
},
points: {
type: Number,
label: "Points"
},
finished: {
type: Boolean,
defaultValue: false
}
});
这些也是进入mandatoryCourses数组的确切属性。
我应该以某种方式在课程架构中明确声明_id吗?当课程被添加到课程集合时,它似乎工作正常,只有在与数组mandatoryCourses交互时才会正常工作。
提前致谢。
答案 0 :(得分:0)
将_id字段添加到Courses模式可以解决问题。
我仍然不确定这种互动,并希望有人澄清为什么有必要将其包含在强制性课程的情况下,而它适用于模式的其他用途。