database - 如何编写 MongoDB 查询来执行以下更新?
问题描述
我想在下面的 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
})
推荐阅读
- node.js - 无法在函数范围之外更改值
- python - 谁能解释一下 eval() 和 dict() 函数?
- python - 为什么这个混淆矩阵(matplotlib)在 Jupyter Notebook 中看起来被压扁了?
- tensorflow - 使用 fit_generator 和 dropout 层进行 Keras 验证
- google-apps-script - 如何访问共享(团队)云端硬盘中 Google Apps 脚本的 Stackdriver Logging?
- rust - actix_web 将配置传递给处理程序
- postgresql - 在 PostgreSQL 中,如何获得所有先前值都满足条件的最大值
- python - 如何在特定字符之外的指定位置拆分重复字符串?
- java - 如何在 Map 中进行迭代循环
, FlowRuleStats>? - ios - Firebase如何检查快照的孩子本身是否属于Datasnapshot类型