首页 > 解决方案 > 使用未知索引更新嵌套字段且不影响其他条目

问题描述

我有一个布局看起来像这样的集合:

    student1 = {
    "First_Name": "John",
    "Last_Name": "Doe",
    "Courses": [
        {
            "Course_Id": 123,
            "Course_Name": "Computer Science",
            "Has_Chosen_Modules": false
        },
        {
            "Course_Id": 284,
            "Course_Name": "Mathematics",
            "Has_Chosen_Modules": false
        }
    ]
};

我还有以下更新查询:

db.Collection_Student.update(
    { 
        $and: [
            {First_Name: "John"},
            {Last_Name: "Doe"}
        ]
    },
    { 
        $set : { "Courses.0.Has_Chosen_Modules" : true } 
    }
    );

此代码当前会将计算机科学Has_Chosen_Modules值更新为 true,因为索引是硬编码的。但是,如果我想更新Has_Chosen_Modulesvia 的值怎么办Course_Id(因为课程不一定每次都在同一个索引)?在不影响给定学生正在学习的其他课程的情况下,我将如何实现这一目标?

标签: mongodb

解决方案


您可以通过使用点定位文档子数组中的任何属性来选择文档子数组中的任何项目.

您可以通过以下查询轻松实现此目的。

db.Collection_Student.update(
  { 
    First_Name: "John",
    Last_Name: "Doe",
    'Courses.Course_Id': 123
  },
  { 
    $set : { "Courses.$.Has_Chosen_Modules" : true } 
  }
);

搜索过滤器中的条件默认被视为$and运算符,因此您不需要专门$and为这个简单的查询编写。


推荐阅读