MongoDB C#:如何基于数组字段与过滤数组构建FilterDefinition
嵌套数组匹配过滤实现
针对需求,这里提供两种简洁的实现方式:
方法一:使用 ElemMatch 结合 Contains
通过 ElemMatch 指定数组元素的匹配条件,判断 EntityID 是否存在于 Materials 数组中:
// 替换 YourModelType 为实际的模型类名 var filter = Builders<YourModelType>.Filter.ElemMatch( model => model.RawMaterials, rawMaterial => Materials.Contains(rawMaterial.EntityID) );
方法二:使用 In 结合数组占位符
利用 MongoDB 数组下标 -1(代表数组中任意元素),结合 In 方法实现匹配,写法更简洁:
// 替换 YourModelType 为实际的模型类名 var filter = Builders<YourModelType>.Filter.In( model => model.RawMaterials[-1].EntityID, Materials );
注意事项
- 确保
Materials数组不为空,否则过滤条件会匹配不到任何文档; - 如果需要给嵌套元素添加多个匹配条件(比如同时判断
EntityID和Title),优先选择ElemMatch,它支持组合多条件; - 两种写法的查询效果一致,可根据代码风格偏好选择。
内容的提问来源于stack exchange,提问作者safaee007
相关产品推荐
相关产品推荐

