我正在尝试使以下架构起作用:
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”必须改变什么?