【发布时间】:2013-05-02 18:23:10
【问题描述】:
我的架构是
var UserQuizSchema = mongoose.Schema({
uid:{type:ObjectId,required: true,index:true},
answer:[{content:String, qid:ObjectId ,time:Date }],
});
在此架构中,“uid”表示用户标识符,而“answer”数组存储学生已回答的答案。在每个答案中,qid 与问题 ID 相关,'content' 是学生的真实答案,'time' 是修改后的答案时间戳。
这里我使用猫鼬将新答案插入到数组中
function updateAnswer(uid,question_id,answer,callback){
var options = { new: false };
var quiz_id = mongoose.Types.ObjectId(quiz_id);
var qid = mongoose.Types.ObjectId(question_id);
UserQuizModel.findOneAndUpdate({'uid':uid},{'$addToSet':{'answer':{'qid':qid, 'content':answer} } },options,function(err,ref){
if(err) {
console.log('update '.red,err);
callback(err, null);
}else{
console.log('update '.green+ref);
callback(null,ref);
}
})
}
在常识中,使用 addToSet 命令,答案数组中的元素应该是唯一的,但在我的示例中,答案数组只能有多个相同的嵌入文档,除了每个嵌入文档有一个唯一的 OjbectId _id
如
answer:
[ { qid: 5175aecf0e5b061414000001, _id: 518a5e5895fc9ddc1e000003 },
{ qid: 5175aecf0e5b061414000001, _id: 518a5e5f95fc9ddc1e000004 } ] }
你看到两个嵌入文档的qid相同,但_id不同。
为什么还有一个额外的_id,我不把它放在架构设计上??
【问题讨论】: