如何更新具有多个级别的数组和对象的Mongdb文档

问题描述 投票:0回答:1

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

{
"_id" : NumberLong(1),
"branch" : "Mogappair",
"mode" : "CBSE",
"grades" : "12",
"email" : "[email protected]",
"adminUser" : "[email protected]",
"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"

}

mongodb mongodb-query
1个回答
0
投票

我们可以使用array update operators

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

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

$[grade]引用第二个数组divisionGrade,其条件在arrayFilters 'divGrade.grade': 4中,divGradedivisionGrade数组内的对象

$[sec]中的相同

希望有帮助

© www.soinside.com 2019 - 2024. All rights reserved.