mongodb - 如何更新具有多级数组和对象的 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"
}
解决方案
我们可以使用数组更新运算符
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]
希望能帮助到你
推荐阅读
- c# - c# 将 "\\" 替换为 "\" 字符
- javascript - Rmarkdown 报告 (HTML) 中分组数据框上的 DT::datatable
- vba - Word VBA:查找一串文本并将其所有实例更改为标题大小写
- python - 有没有办法在 Python 的列表间隔中使用 map ?
- jenkins - 对多分支管道使用 copyArtifactPermission
- kafka-node - 如何使用 kafka-node 的 client.TopicExists() 方法?
- sql - 如何将 ID 插入另一个表
- javascript - 制表符上的文本换行
- c++ - (C++)我在 OpenGL 中使用帧缓冲区是否走在正确的轨道上?
- python-3.x - 对于 Hermitian 矩阵,numpy.linalg.eig 给出的结果与 numpy.linalg.eigh 不同