如何用C# MongoDB.Driver查询含指定值的子/孙级文档
MongoDB 多层级Id匹配查询方案
针对你需要匹配任意子级、孙级Id字段的需求,可以利用MongoDB的点符号访问嵌套字段结合$or操作符实现多条件筛选,以下是针对你提供的文档结构的具体查询实现:
假设你要匹配的目标字符串为"target-id",查询语句如下:
db.yourCollection.find({ $or: [ // 匹配顶级Id { Id: "target-id" }, // 匹配子级Child1的ChildId { "Child1.ChildId": "target-id" }, // 匹配孙级:ChildList1数组中的GrandchildId1/GrandchildId2 { "ChildList1.GranchildList1.GrandchildId1": "target-id" }, { "ChildList1.GranchildList1.GrandchildId2": "target-id" }, // 匹配孙级:ChildList2第一组嵌套数组的GrandchildId3/GrandchildId4 { "ChildList2.GranchildList2.GrandchildId3": "target-id" }, { "ChildList2.GranchildList2.GrandchildId4": "target-id" }, // 匹配孙级:ChildList2第二组嵌套数组的GrandchildId5/GrandchildId6 { "ChildList2.GranchildList3.GrandchildId5": "target-id" }, { "ChildList2.GranchildList3.GrandchildId6": "target-id" } ] })
关键说明:
- 点符号定位:MongoDB支持通过
父字段.子字段的格式直接访问嵌套对象或数组内的字段,对于数组类型的字段,MongoDB会自动遍历数组中的所有元素,只要有一个元素的目标字段匹配,就会返回整个文档。 - $or操作符:将所有需要匹配的Id字段条件放入
$or数组中,只要文档满足其中任意一个条件,就会被筛选出来。
如果你的实际文档中存在字段名统一的嵌套Id(比如所有孙级Id都叫GrandchildId),可以简化条件,例如:
{ "ChildList1.GranchildList1.GrandchildId": "target-id" }
这条语句会匹配GranchildList1数组中任意元素的GrandchildId等于目标值的文档。
内容的提问来源于stack exchange,提问作者Orion
相关产品推荐
相关产品推荐

