【问题标题】:adding multiple same documents using addtoset command in mongoose在 mongoose 中使用 addtoset 命令添加多个相同的文档
【发布时间】: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,我不把它放在架构设计上??

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    您可以通过显式定义元素的架构并将 _id 选项设置为 false 来禁用嵌入对象中的 _id

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

    【讨论】:

    • 谢谢,约翰尼,'_id' 确实消失了。但另一个问题是使用“$addToSet”命令多次添加相同的嵌入文档会导致数组中出现多个相同的嵌入文档
    • @user824624 你能用一个最小的例子来更新你的问题,重现你所看到的问题吗?
    猜你喜欢
    • 2016-11-04
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2018-05-23
    • 2021-07-27
    • 2023-03-18
    • 2017-02-22
    • 1970-01-01
    相关资源
    最近更新 更多