当前位置:  开发笔记 > 编程语言 > 正文

在mongoose中使用addtoset命令添加多个相同的文档

如何解决《在mongoose中使用addtoset命令添加多个相同的文档》经验,为你挑选了1个好方法。

我的架构是

var UserQuizSchema = mongoose.Schema({   
        uid:{type:ObjectId,required: true,index:true},
        answer:[{content:String, qid:ObjectId ,time:Date }],        
});

在此模式中,'uid'表示用户标识符,而'answer'数组存储学生已回答的答案.在每个答案中,qid与问题ID相关,"内容"是学生的真实答案,"时间"是答案的修改时间戳.

在这里,我使用mongoose将新答案插入到数组中

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,我不把它的架构设计?



1> JohnnyHK..:

您可以_id通过为_id选项设置为false 的元素显式定义模式来禁用嵌入对象:

var UserQuizSchema = mongoose.Schema({   
    uid:{type:ObjectId,required: true,index:true},
    answer:[new Schema({content:String, qid:ObjectId, time:Date}, {_id:false})]
});

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有