如何编写 MongoDB 查询来执行以下更新?
How to write a MongoDB query to perform the following update?
我想在下面的 Mongo 文档中更新特定考试的特定问题的内部字段,例如 user_answer、isAnswered 等。
上图的文档文件:
{
"_id":{"$oid":"60508fb1c4b07a4134e75644"},
"student_id":"5faaac5d35b7ba4ed406e765",
"exams":[
{"score":null,
"time_taken":null,
"exam_taken":true,
"_id":{"$oid":"60508fb1c4b07a4134e75645"},
"exam_id":"5fbfc8ea9831540072063e62",
"questions":[
{"user_answer":null,
"isAnswered":false,
"isUnanswered":true,
"isFlagged":false,
"_id":{"$oid":"5fbfc8659831540072063e61"}
}
]
}
]
}
我为此编写了一个查询,但它不起作用。
try{
await req.db
.collection('result')
.findOneAndUpdate({ student_id: ObjectId("5faaac5d35b7ba4ed406e765"), "exams._id": ObjectId(exam_id),"exams.questions._id":ObjectId(question_id) }, {
$set: {
'questions.$.user_answer': answer,
'questions.$.isAnswered':true,
'questions.$.isUnanswered':false,
'questions.$.isFlagged':false
}
}
);
res.status(201).end();
}catch(e){
console.log(e);
}
虽然我确定查询本身有问题,但如果你们中的任何人能告诉我如何执行此类更新,我将不胜感激。
同样谢谢你
从 MongoDB 3.5.12 开始,您可以使用带有选项 arrayFilters 的更新运算符来更新嵌套数组元素。
db.collection.update({
"student_id": ObjectId("5faaac5d35b7ba4ed406e765"),
"exams.exam_id": ObjectId("5fbfc8ea9831540072063e62")
},
{
$set: {
"exams.$.questions.$[question].user_answer": "You are the best",
"exams.$.questions.$[question].isAnswered": true,
"exams.$.questions.$[question].isUnanswered": false,
"exams.$.questions.$[question].isFlagged": false
}
},
{
arrayFilters: [
{
"question._id": ObjectId("5fbfc8659831540072063e61")
}
],
multi: true
})
我想在下面的 Mongo 文档中更新特定考试的特定问题的内部字段,例如 user_answer、isAnswered 等。
上图的文档文件:
{
"_id":{"$oid":"60508fb1c4b07a4134e75644"},
"student_id":"5faaac5d35b7ba4ed406e765",
"exams":[
{"score":null,
"time_taken":null,
"exam_taken":true,
"_id":{"$oid":"60508fb1c4b07a4134e75645"},
"exam_id":"5fbfc8ea9831540072063e62",
"questions":[
{"user_answer":null,
"isAnswered":false,
"isUnanswered":true,
"isFlagged":false,
"_id":{"$oid":"5fbfc8659831540072063e61"}
}
]
}
]
}
我为此编写了一个查询,但它不起作用。
try{
await req.db
.collection('result')
.findOneAndUpdate({ student_id: ObjectId("5faaac5d35b7ba4ed406e765"), "exams._id": ObjectId(exam_id),"exams.questions._id":ObjectId(question_id) }, {
$set: {
'questions.$.user_answer': answer,
'questions.$.isAnswered':true,
'questions.$.isUnanswered':false,
'questions.$.isFlagged':false
}
}
);
res.status(201).end();
}catch(e){
console.log(e);
}
虽然我确定查询本身有问题,但如果你们中的任何人能告诉我如何执行此类更新,我将不胜感激。
同样谢谢你
从 MongoDB 3.5.12 开始,您可以使用带有选项 arrayFilters 的更新运算符来更新嵌套数组元素。
db.collection.update({
"student_id": ObjectId("5faaac5d35b7ba4ed406e765"),
"exams.exam_id": ObjectId("5fbfc8ea9831540072063e62")
},
{
$set: {
"exams.$.questions.$[question].user_answer": "You are the best",
"exams.$.questions.$[question].isAnswered": true,
"exams.$.questions.$[question].isUnanswered": false,
"exams.$.questions.$[question].isFlagged": false
}
},
{
arrayFilters: [
{
"question._id": ObjectId("5fbfc8659831540072063e61")
}
],
multi: true
})