Mongoose嵌套更新"无法使用该部分。"遍历

时间:2017-11-02 17:28:05

标签: mongodb mongoose

我有一个关于更新MongoDB中嵌套文档的问题。我使用的是Mongoose,但因为我无法找到答案,所以我切换到了我的Robo3T shell(v.1.1.1)。

我想要做的是在一轮中插入一个问题的答案。该文件有一系列轮次。每轮都有一系列问题。每个问题都有一系列答案。 在后来的体育场,我也希望能够更新答案,但我想当我做对了,那就不会那么困难。

我有这个答案,我想插入:

{
    answer: "Intelligent answer",
    approved: false,
    teamId: ObjectId("59faf27e40b719352a62e5f1"),
    id: ObjectId("59faf27e40b719352a62e5f1")
  }

我有这个文件结构:

{
"_id" : ObjectId("59faf27e40b719352a62e5f1"),
"name" : "AvengersQuizz",
"password" : "verysecure",
"status" : "Playing",
"rounds" : [ 
    {
        "_id" : 1,
        "questions" : [ 
            {
                "status" : "Closed",
                "questionId" : ObjectId("59faf27d40b719352a62e2d7"),
                "_id" : ObjectId("59faf27e40b719352a62e623"),
                "answers" : [ 
                    {
                        "answer" : "a",
                        "approved" : false,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c8"),
                        "_id" : ObjectId("59faf27e40b719352a62e625")
                    }, 
                    {
                        "answer" : "ab",
                        "approved" : true,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c9"),
                        "_id" : ObjectId("59faf27e40b719352a62e624")
                    }
                ]
            }, 
            {
                "status" : "Closed",
                "questionId" : ObjectId("59faf27d40b719352a62e2d5"),
                "_id" : ObjectId("59faf27e40b719352a62e620"),
                "answers" : [ 
                    {
                        "answer" : "a",
                        "approved" : false,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c8"),
                        "_id" : ObjectId("59faf27e40b719352a62e622")
                    }, 
                    {
                        "answer" : "ab",
                        "approved" : true,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c9"),
                        "_id" : ObjectId("59faf27e40b719352a62e621")
                    }
                ]
            }, 
            {
                "status" : "Closed",
                "questionId" : ObjectId("59faf27d40b719352a62e2d4"),
                "_id" : ObjectId("59faf27e40b719352a62e61d"),
                "answers" : [ 
                    {
                        "answer" : "a",
                        "approved" : false,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c8"),
                        "_id" : ObjectId("59faf27e40b719352a62e61f")
                    }, 
                    {
                        "answer" : "ab",
                        "approved" : true,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c9"),
                        "_id" : ObjectId("59faf27e40b719352a62e61e")
                    }
                ]
            }, 
            {
                "status" : "Closed",
                "questionId" : ObjectId("59faf27d40b719352a62e2d3"),
                "_id" : ObjectId("59faf27e40b719352a62e61a"),
                "answers" : [ 
                    {
                        "answer" : "a",
                        "approved" : false,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c8"),
                        "_id" : ObjectId("59faf27e40b719352a62e61c")
                    }, 
                    {
                        "answer" : "ab",
                        "approved" : true,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c9"),
                        "_id" : ObjectId("59faf27e40b719352a62e61b")
                    }
                ]
            }, 
            {
                "status" : "Closed",
                "questionId" : ObjectId("59faf27d40b719352a62e2d6"),
                "_id" : ObjectId("59faf27e40b719352a62e617"),
                "answers" : [ 
                    {
                        "answer" : "a",
                        "approved" : false,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c8"),
                        "_id" : ObjectId("59faf27e40b719352a62e619")
                    }, 
                    {
                        "answer" : "ab",
                        "approved" : true,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c9"),
                        "_id" : ObjectId("59faf27e40b719352a62e618")
                    }
                ]
            }, 
            {
                "status" : "Closed",
                "questionId" : ObjectId("59faf27d40b719352a62e2db"),
                "_id" : ObjectId("59faf27e40b719352a62e614"),
                "answers" : [ 
                    {
                        "answer" : "a",
                        "approved" : false,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c8"),
                        "_id" : ObjectId("59faf27e40b719352a62e616")
                    }, 
                    {
                        "answer" : "ab",
                        "approved" : true,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c9"),
                        "_id" : ObjectId("59faf27e40b719352a62e615")
                    }
                ]
            }, 
            {
                "status" : "Closed",
                "questionId" : ObjectId("59faf27d40b719352a62e2da"),
                "_id" : ObjectId("59faf27e40b719352a62e611"),
                "answers" : [ 
                    {
                        "answer" : "a",
                        "approved" : false,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c8"),
                        "_id" : ObjectId("59faf27e40b719352a62e613")
                    }, 
                    {
                        "answer" : "ab",
                        "approved" : true,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c9"),
                        "_id" : ObjectId("59faf27e40b719352a62e612")
                    }
                ]
            }, 
            {
                "status" : "Closed",
                "questionId" : ObjectId("59faf27d40b719352a62e2d9"),
                "_id" : ObjectId("59faf27e40b719352a62e60e"),
                "answers" : [ 
                    {
                        "answer" : "a",
                        "approved" : false,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c8"),
                        "_id" : ObjectId("59faf27e40b719352a62e610")
                    }, 
                    {
                        "answer" : "ab",
                        "approved" : true,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c9"),
                        "_id" : ObjectId("59faf27e40b719352a62e60f")
                    }
                ]
            }, 
            {
                "status" : "Closed",
                "questionId" : ObjectId("59faf27d40b719352a62e2d8"),
                "_id" : ObjectId("59faf27e40b719352a62e60b"),
                "answers" : [ 
                    {
                        "answer" : "a",
                        "approved" : false,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c8"),
                        "_id" : ObjectId("59faf27e40b719352a62e60d")
                    }, 
                    {
                        "answer" : "ab",
                        "approved" : true,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c9"),
                        "_id" : ObjectId("59faf27e40b719352a62e60c")
                    }
                ]
            }, 
            {
                "status" : "Closed",
                "questionId" : ObjectId("59faf27d40b719352a62e2df"),
                "_id" : ObjectId("59faf27e40b719352a62e608"),
                "answers" : [ 
                    {
                        "answer" : "a",
                        "approved" : false,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c8"),
                        "_id" : ObjectId("59faf27e40b719352a62e60a")
                    }, 
                    {
                        "answer" : "ab",
                        "approved" : true,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c9"),
                        "_id" : ObjectId("59faf27e40b719352a62e609")
                    }
                ]
            }, 
            {
                "status" : "Closed",
                "questionId" : ObjectId("59faf27d40b719352a62e2de"),
                "_id" : ObjectId("59faf27e40b719352a62e605"),
                "answers" : [ 
                    {
                        "answer" : "a",
                        "approved" : false,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c8"),
                        "_id" : ObjectId("59faf27e40b719352a62e607")
                    }, 
                    {
                        "answer" : "ab",
                        "approved" : true,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c9"),
                        "_id" : ObjectId("59faf27e40b719352a62e606")
                    }
                ]
            }, 
            {
                "status" : "Closed",
                "questionId" : ObjectId("59faf27d40b719352a62e2dd"),
                "_id" : ObjectId("59faf27e40b719352a62e602"),
                "answers" : [ 
                    {
                        "answer" : "a",
                        "approved" : false,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c8"),
                        "_id" : ObjectId("59faf27e40b719352a62e604")
                    }, 
                    {
                        "answer" : "ab",
                        "approved" : true,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c9"),
                        "_id" : ObjectId("59faf27e40b719352a62e603")
                    }
                ]
            }
        ],
        "categories" : [ 
            ObjectId("59faf27d40b719352a62e2cb"), 
            ObjectId("59faf27d40b719352a62e2cc"), 
            ObjectId("59faf27d40b719352a62e2cd")
        ]
    }, 
    {
        "_id" : 2,
        "questions" : [ 
            {
                "status" : "Closed",
                "questionId" : ObjectId("59faf27d40b719352a62e2d7"),
                "_id" : ObjectId("59faf27e40b719352a62e5ff"),
                "answers" : [ 
                    {
                        "answer" : "a",
                        "approved" : false,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c8"),
                        "_id" : ObjectId("59faf27e40b719352a62e601")
                    }, 
                    {
                        "answer" : "ab",
                        "approved" : true,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c9"),
                        "_id" : ObjectId("59faf27e40b719352a62e600")
                    }
                ]
            }, 
            {
                "status" : "Open",
                "questionId" : ObjectId("59faf27d40b719352a62e2d5"),
                "_id" : ObjectId("59faf27e40b719352a62e5fc"),
                "answers" : [ 
                    {
                        "answer" : "a",
                        "approved" : false,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c8"),
                        "_id" : ObjectId("59faf27e40b719352a62e5fe")
                    }, 
                    {
                        "answer" : "ab",
                        "approved" : true,
                        "teamId" : ObjectId("59faf27c40b719352a62e2c9"),
                        "_id" : ObjectId("59faf27e40b719352a62e5fd")
                    }
                ]
            }, 
            {
                "status" : "Queued",
                "questionId" : ObjectId("59faf27d40b719352a62e2d4"),
                "_id" : ObjectId("59faf27e40b719352a62e5fb"),
                "answers" : []
            }, 
            {
                "status" : "Queued",
                "questionId" : ObjectId("59faf27d40b719352a62e2d3"),
                "_id" : ObjectId("59faf27e40b719352a62e5fa"),
                "answers" : []
            }, 
            {
                "status" : "Queued",
                "questionId" : ObjectId("59faf27d40b719352a62e2d6"),
                "_id" : ObjectId("59faf27e40b719352a62e5f9"),
                "answers" : []
            }, 
            {
                "status" : "Queued",
                "questionId" : ObjectId("59faf27d40b719352a62e2db"),
                "_id" : ObjectId("59faf27e40b719352a62e5f8"),
                "answers" : []
            }, 
            {
                "status" : "Queued",
                "questionId" : ObjectId("59faf27d40b719352a62e2da"),
                "_id" : ObjectId("59faf27e40b719352a62e5f7"),
                "answers" : []
            }, 
            {
                "status" : "Queued",
                "questionId" : ObjectId("59faf27d40b719352a62e2d9"),
                "_id" : ObjectId("59faf27e40b719352a62e5f6"),
                "answers" : []
            }, 
            {
                "status" : "Queued",
                "questionId" : ObjectId("59faf27d40b719352a62e2d8"),
                "_id" : ObjectId("59faf27e40b719352a62e5f5"),
                "answers" : []
            }, 
            {
                "status" : "Queued",
                "questionId" : ObjectId("59faf27d40b719352a62e2df"),
                "_id" : ObjectId("59faf27e40b719352a62e5f4"),
                "answers" : []
            }, 
            {
                "status" : "Queued",
                "questionId" : ObjectId("59faf27d40b719352a62e2de"),
                "_id" : ObjectId("59faf27e40b719352a62e5f3"),
                "answers" : []
            }, 
            {
                "status" : "Queued",
                "questionId" : ObjectId("59faf27d40b719352a62e2dd"),
                "_id" : ObjectId("59faf27e40b719352a62e5f2"),
                "answers" : []
            }
        ],
        "categories" : [ 
            ObjectId("59faf27d40b719352a62e2cb"), 
            ObjectId("59faf27d40b719352a62e2cc"), 
            ObjectId("59faf27d40b719352a62e2cd")
        ]
    }
],
"teams" : [ 
    ObjectId("59faf27c40b719352a62e2c8"), 
    ObjectId("59faf27c40b719352a62e2c9"), 
    ObjectId("59faf27c40b719352a62e2ca")
],
"__v" : 0

}

这是我试图使用的:

db.getCollection('quizzes').update({
   rounds: {
     $elemMatch: {
       _id: 2,
       questions: {
        $elemMatch: {
          questionId: ObjectId("59faf27d40b719352a62e2d5")}}
                    }
                  }
                 }, 
   {
    $push: {
      "rounds.$[rounds].questions.$[questions].answers": {
         answer: "Intelligent answer",
         approved: false,
         teamId: ObjectId("59faf27e40b719352a62e5f1"),
         id: ObjectId("59faf27e40b719352a62e5f1")
       }
    }
   }, {
   arrayFilters: [
   {"rounds._id": 2}, 
   {"questions._id": ObjectId("59faf27e40b719352a62e5fc")}]
   })

它返回以下错误:

cannot use the part (rounds of rounds.$[rounds].questions.$[questions].answers) to traverse the element ({rounds: [ { _id: 1, questions: [ { status: "Closed", questionId: ObjectId('59faf27d40b719352a62e2d7'), _id:  ... (cut off because of space)

我看到类似的问题,但他们没有完全回答我的问题。我已经尝试过这些答案,但似乎仍无法使这项工作成功。谁能向我解释我做错了什么?

0 个答案:

没有答案