【问题标题】:MongoDB v5.0.5 reference existing field in updateMany()MongoDB v5.0.5 引用 updateMany() 中的现有字段
【发布时间】:2021-12-31 15:42:58
【问题描述】:

第一次使用 MongoDB,遇到一个问题,希望能得到一些帮助。

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

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

我想创建一个名为 "Grades" 的嵌入文档,其中包含班级和家庭作业成绩字段,并将其应用于集合中的每个文档,最终得到:

{
"_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 的引用并收到相同的错误。

您的建议将不胜感激

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    您的查询中有一些错误,

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      • 2015-11-30
      • 2021-08-29
      相关资源
      最近更新 更多