首页 > 解决方案 > 如何更新具有多级数组和对象的 Mongdb 文档

问题描述

以下是如何将isCreated值更新为 true 的示例文档,例如等级为 4,部分为 C

{
"_id" : NumberLong(1),
"branch" : "Mogappair",
"mode" : "CBSE",
"grades" : "12",
"email" : "naquzrve@grr.la",
"adminUser" : "naquzrve@grr.la",
"phoneNumber" : "12135465658",
"address" : {
    "address1" : "address12",
    "address2" : "address12",
    "street" : "street",
    "area" : "area",
    "city" : "city",
    "pincode" : "edited",
    "state" : "TN",
    "lastModified" : "5/6/20 7:58 AM"
},
"divisionProvided" : [ 
    "HIGHER SECONDARY", 
    "KINDERGARTEN", 
    "PRIMARY"
],
"availableGradesAndSections" : [ 
    {
        "division" : "HIGHER SECONDARY",
        "divisionGrade" : [ 
            {
                "grade" : "9",
                "section" : [ 
                    {
                        "section" : "B",
                        "isCreated" : true
                    }, 
                    {
                        "section" : "A",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "C",
                        "isCreated" : false
                    }
                ]
            }, 
            {
                "grade" : "7",
                "section" : [ 
                    {
                        "section" : "B",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "A",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "C",
                        "isCreated" : false
                    }
                ]
            }, 
            {
                "grade" : "8",
                "section" : [ 
                    {
                        "section" : "B",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "A",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "C",
                        "isCreated" : false
                    }
                ]
            }, 
            {
                "grade" : "6",
                "section" : [ 
                    {
                        "section" : "B",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "A",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "C",
                        "isCreated" : false
                    }
                ]
            }, 
            {
                "grade" : "10",
                "section" : [ 
                    {
                        "section" : "B",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "A",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "C",
                        "isCreated" : false
                    }
                ]
            }
        ]
    }, 
    {
        "division" : "KINDERGARTEN",
        "divisionGrade" : [
            {
                "grade" : "L.K.G",
                "section" : [ 
                    {
                        "section" : "B",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "A",
                        "isCreated" : false
                    }
                ]
            }, 
            {
                "grade" : "U.K.G",
                "section" : [ 
                    {
                        "section" : "B",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "A",
                        "isCreated" : false
                    }
                ]
            }
        ]
    }, 
    {
        "division" : "PRIMARY",
        "divisionGrade" : [ 
            {
                "grade" : "2",
                "section" : [ 
                    {
                        "section" : "B",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "A",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "D",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "C",
                        "isCreated" : false
                    }
                ]
            }, 
            {
                "grade" : "4",
                "section" : [ 
                    {
                        "section" : "B",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "A",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "D",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "C",
                        "isCreated" : false
                    }
                ]
            }, 
            {
                "grade" : "1",
                "section" : [ 
                    {
                        "section" : "B",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "A",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "D",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "C",
                        "isCreated" : false
                    }
                ]
            }, 
            {
                "grade" : "3",
                "section" : [ 
                    {
                        "section" : "B",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "A",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "D",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "C",
                        "isCreated" : false
                    }
                ]
            }, 
            {
                "grade" : "5",
                "section" : [ 
                    {
                        "section" : "B",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "A",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "D",
                        "isCreated" : false
                    }, 
                    {
                        "section" : "C",
                        "isCreated" : false
                    }
                ]
            }
        ]
    }
],
"onboardingComplete" : true,
"lastModified" : "5/6/20 7:58 AM",
"_class" : "com.institution.model.Institution"

}

标签: mongodbmongodb-query

解决方案


我们可以使用数组更新运算符

db.collection.updateOne(
    { _id: NumberLong(1) }, 
    { $set: 
        { 'availableGradesAndSections.$[].divisionGrade.$[divGrade].section.$[sec].isCreated': true } 
    }, 
    { arrayFilters: [{ 'divGrade.grade': '4' }, { 'sec.section': 'C' }] 
})

第一个$[],更新第一个数组中的所有项目,该数组availableGradesAndSections没有条件,这就是我们使用的原因$[]

the$[divGade]指的是第二个数组divisionGrade,它的条件是在arrayFilters中'divGrade.grade': 4,是数组divGrade里面的对象divisionGrade

和同样的$[sec]

希望能帮助到你


推荐阅读