Mongoose:如何使用一组子文档(一个唯一字段)构建一个模式?

时间:2014-04-20 06:14:17

标签: node.js mongoose upsert

我正在尝试使以下架构起作用:

var FormSchema = new mongoose.Schema({
    form_code: { type: String, unique: true },
    ...
});
var UserSchema = new mongoose.Schema({
    ...
    submissions: [{
        form_code: { type: String, unique: true },
        last_update: Date,
        questions: [{
            question_code: String,
            answers: [Number]
        }]
    }],
});

这里的基本原理是用户可以提交许多独特的表单,但只保存每个唯一表单的最后一次提交。因此,理想情况下,通过在更新用户时推送提交子文档,架构会将提交对象添加到集合中,或更新包含form_code的子文档。

以下代码无法正常工作(即使form_code已存在,它也会推送新的子文档):

User.findOneAndUpdate(
    { _id: user.id },
    { $addToSet: { submissions: submission_object } },
    function (err, user) {
        // will eventually have duplicates of form_code at user.submissions
    }
);

上面的架构显然不起作用,为实现“upsertToSet”必须改变什么?

0 个答案:

没有答案