将对象插入集合时缺少 _id

Missing _id when inserting Object into Collection

我的数据库有用户、教育和课程的集合。

当服务器启动时,它应该用必要的数据填充教育,包括一个名为 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(course) 表明该课程确实拥有一个 _id,但它不会显示在数组条目中。

addCourse 是一个类似的操作,用户可以在其中获取附加到自身的课程。此操作完美无缺,包括 _id,代码如下:

    let course = Courses.findOne({code: courseId});
    Meteor.users.update(userId, {
        $addToSet: {
            courses: course
        }
    });

courseId/code的用法是正确的。我怀疑问题出在 mandatoryCourses 使用的模式中。作为参考,user.courses 字段被初始化为空数组,而 mandatoryCourses 被定义为课程数组,[Course].

课程架构依次如下所示:

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?当课程被添加到 Courses 集合时,它似乎工作得很好,只是在与数组 mandatoryCourses 交互时没有。

提前致谢。

将 _id 字段添加到课程架构中就可以了。

我仍然不确定这种交互,希望有人能澄清为什么有必要将它包含在强制性课程的情况下,而它对于模式的其他用途来说效果很好。