我的用户集合被定义为允许如下所示:
{
_id: String,
questions: [Object]
}
在questions
内,它看起来像这样(例子):
[
{
questionId: 'f93uf0auf'
answer: ["yes", "maybe"]
},
{
questionId: 'avka+0uf'
answer: ["no"]
}
]
我试图找到这个集合的全能命令,并涵盖以下基础:
questions
字段不存在,则应创建该字段。answer
集。我想做这样的事情:
Users.update({_id: userId, 'questions.questionId': questionId}, {$addToSet: {'questions.$.answer': answer}})
但是,如果该字段不存在,则不会创建该字段。 upsert
也不起作用。
是否有全能命令?
答案 0 :(得分:0)
我找不到通过$addToSet
满足您要求的一种方法,这是通过命令执行此操作的一种方法。
> db.questions
.find({_id: userId})
.forEach(function(doc) {
if (!doc.questions) {
doc['questions'] = []
};
var exist = false;
doc.questions.map(function(e) {
if (e.questionId && (e.questionId == questionId)){
e.answer.push(answer);
exist = true;
}
});
if (!exist) {
doc.questions.push({questionId: questionId, answer: [answer]});
}
db.questions.save(doc);
});