MongoDB以不同的方式更新嵌入式数组的每个元素
我有一系列文件(如“学生”),如下所示:MongoDB以不同的方式更新嵌入式数组的每个元素,mongodb,Mongodb,我有一系列文件(如“学生”),如下所示: { _id: ObjectId("C24eb7aC0189B18A3D3Ca0FD"), name: "john doe", dob: "1993-05-15" class: "1", courses: [ {name: "math"}, {name: "geometry&q
{
_id: ObjectId("C24eb7aC0189B18A3D3Ca0FD"),
name: "john doe",
dob: "1993-05-15"
class: "1",
courses: [
{name: "math"},
{name: "geometry"},
{name: "physics"}
]
}
如您所见,每个都有一个嵌入式课程数组
。现在,考试结束后,当成绩确定后,我需要更新学生文档,并将每门课程的成绩添加到其对象中,如下所示:
{
_id: ObjectId("C24eb7aC0189B18A3D3Ca0FD"),
name: "john doe",
dob: "1993-05-15"
class: "1",
courses: [
{name: "math", grade: 18},
{name: "geometry", grade: 19},
{name: "physics", grade: 16}
]
}
有没有任何方法可以在一个查询中实现这一点?例如,我给它一个由分数组成的数组,它将每个分数添加到相应的课程中
$[]
操作符可以对嵌入数组的所有元素执行持续更新(例如,为每门课程添加相同的分数),但显然这不是我想要的
另外,如果不能在单个查询中实现,那么正确的方法是什么
提前感谢您可以尝试,筛选的位置运算符$[]
识别与更新操作的阵列过滤器
条件匹配的阵列元素,例如
db.collection.updateOne({
"_id": ObjectId("C24eb7aC0189B18A3D3Ca0FD")
},
{
"$set": {
"courses.$[e1].grade": 18,
"courses.$[e2].grade": 19,
"courses.$[e3].grade": 16
}
},
{
"arrayFilters": [
{ "e1.name": "math" },
{ "e2.name": "geometry" },
{ "e3.name": "physics" }
]
})
它将如何确定课程顺序,以及根据您所选课程的分数排列是否始终相同?您能在问题中添加请求正文和输入吗。@turivishal课程是一个数组,因此它有顺序。我的成绩也很好。或者,如果您愿意,我可以为每门课程使用
\u id
。因为我正在写这段代码,所以我可以根据需要来做