将Object插入Collection时缺少_id

时间:2016-05-29 19:34:30

标签: mongodb meteor simple-schema

我的数据库包含用户,教育和课程的集合。

当服务器启动时,它应该用必要的数据填充教育,包括一个名为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交互时才会正常工作。

提前致谢。

1 个答案:

答案 0 :(得分:0)

将_id字段添加到Courses模式可以解决问题。

我仍然不确定这种互动,并希望有人澄清为什么有必要将其包含在强制性课程的情况下,而它适用于模式的其他用途。