2013-05-08 4 views
3

Моя схема являетсядобавление нескольких документов, используя те же addtoset команду в мангуста

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

В этой схеме, «UID» представляет собой идентификатор пользователя, в то время как «ответ» магазинов массива ответов студент ответил. в каждом ответе qid относится к идентификатору вопроса, а «контент» - это реальный ответ ученика, «время» - это измененная метка времени для ответа.

Здесь я использую мангуст, чтобы upsert новых ответов в массив

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 } ] } 

вы видите ци d двух вложенных документов одинаковы, но _id различны.

Почему есть дополнительный _id, я не ставлю его схему?

ответ

6

Вы можете отключить _id в ваших вложенных объектов путем явного определения схемы для элементов с _id параметра установлено значение ложь:

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

спасибо, Джонни, это правда, что «_id» исчез. но еще одна проблема заключается в использовании команды «$ addToSet» для добавления одного и того же встроенного документа несколько раз заставляет несколько одинаковых встроенных документов в массив – user824624

+0

@ user824624 Можете ли вы обновить свой вопрос с минимальным примером, который воспроизводит проблему, которую вы видите? – JohnnyHK

Смежные вопросы