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
。因为我正在写这段代码,所以我可以根据需要来做