Моя схема являетсядобавление нескольких документов, используя те же 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, я не ставлю его схему?
спасибо, Джонни, это правда, что «_id» исчез. но еще одна проблема заключается в использовании команды «$ addToSet» для добавления одного и того же встроенного документа несколько раз заставляет несколько одинаковых встроенных документов в массив – user824624
@ user824624 Можете ли вы обновить свой вопрос с минимальным примером, который воспроизводит проблему, которую вы видите? – JohnnyHK