如何在Mongodb中更新嵌套的多层记录?

时间:2016-02-25 10:18:21

标签: mongodb

我想在用户集合中存储一堆问题和答案,以便一个用户可以像这样存储以下内容:

{
    _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}

尝试存储此信息时出现问题。我想通过-11增加答案,但我无法联系到他们。

我很乐意这样做:

update({_id: userId', 'questions.questionId': questionId'},
{$inc: {'questions.$.answer[name]': 1}})

其中userIdquestionIdname都是正确的变量。

编辑:第二个想法,那根本不会起作用。毕竟我真的需要使用$两次。

但是这种语法是不允许的。也不允许两次使用$

我该怎么办?

1 个答案:

答案 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}});
    });