我想在用户集合中存储一堆问题和答案,以便一个用户可以像这样存储以下内容:
{
_id: '34ifujia0',
questions: [
{
'questionId': 'someQuestion',
'answer': [
{
'name': 'questionWithinQuestion',
'answer': 5
},
{
'name': 'anotherQuestionWithinQuestion',
'answer': 10
}
]
}
]
}
因此,有多个问题,它们可以是多层次的,可以保留多个答案。因此,如果最重要的问题是"将这些颜色排在1-10和#34之间; (只是一个愚蠢的例子),对于那些非常喜欢蓝色的人,问题会保留{name: 'red', answer: 5}, {name: 'blue', answer: 10}
。
尝试存储此信息时出现问题。我想通过-1
或1
增加答案,但我无法联系到他们。
我很乐意这样做:
update({_id: userId', 'questions.questionId': questionId'},
{$inc: {'questions.$.answer[name]': 1}})
其中userId
,questionId
和name
都是正确的变量。
(编辑:第二个想法,那根本不会起作用。毕竟我真的需要使用$
两次。)
但是这种语法是不允许的。也不允许两次使用$
。
我该怎么办?
答案 0 :(得分:0)
根据此问题Positional Operator Matching Nested Arrays
,当前不能使用多个位置$
运算符。
也许这是一个解决方法
> db.collection.find({_id: userId, 'questions.questionId': questionId})
.forEach(function(doc) {
doc.questions.map(function(q) {
if (q.questionId == questionId) {
q.answer.map(function(a) {
a.answer += 1; // or -= 1;
});
}
});
db.collection.update({_id: doc._id},
{$set: {questions: doc.questions}});
});