我有一个关于更新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)
我看到类似的问题,但他们没有完全回答我的问题。我已经尝试过这些答案,但似乎仍无法使这项工作成功。谁能向我解释我做错了什么?