MongoDB v5.0.5 引用 updateMany() 中的现有字段

MongoDB v5.0.5 reference existing field in updateMany()

第一次使用 MongoDB,我遇到了一个问题,希望能提供帮助。

假设我有一个名为“students”的集合,集合中的文档结构如下:

{
"_id": ObjectId("12345"),
"Name": "Joe Bloggs",
"Class_Grade": "b"
"Homework_Grade": "c",
}

我想创建一个名为 "Grades" 的嵌入式文档,其中包含 class 和家庭作业成绩字段,并将其应用于集合中的每个文档以结束:

{
"_id": ObjectId("12345"),
"Name": "Joe Bloggs",
"Class_Grade": "b"
"Homework_Grade": "c",
"Grades": {
    "Class_Grade": "b",
    "Homework_Grade": "c",
    }
}

我一直在尝试使用 MongoShell 中的 updateMany() 来实现此目的:

db.students.updateMany({}, {$set: {Grades: {"Class_Grade": $Class_Grade, "Homework_Grade": $Homework_grade"}}})

但是,这样做时,我收到参考错误:$Class_Grade 未定义。我尝试修改对 $students.Class_Grade 的引用并收到相同的错误。

非常感谢您的建议

您的查询有一些错误,

  1. 如果要使用内部现有字段的值,需要使用从MongoDB 4.2开始的带有聚合管道的更新,需要将更新部分包裹在attay括号中[ ],因为我添加了查询。

  2. 在要从内部字段使用的字段名称中使用引号例如:"$Class_Grade"

  3. 您使用了字段 $Homework_grade,并且在您的文档中 GGrade 中的大写,因此请尝试使用准确的字段名称 $Homework_Grade

db.students.updateMany({},
[
  {
    $set: {
      Grades: {
        "Class_Grade": "$Class_Grade",
        "Homework_Grade": "$Homework_Grade"
      }
    }
  }
])

Playground