MongoDB C#如何查询内嵌文档数组字段匹配指定列表的文档
查询MongoDB内嵌文档数组字段匹配C#列表值的Class文档
针对你这种内嵌文档数组的场景,只要调整AnyIn的目标字段为内嵌文档里的StudentId即可,具体实现如下:
1. 确保C#实体类与MongoDB文档结构对应
首先要定义和MongoDB文档匹配的实体类:
public class Class { public ObjectId Id { get; set; } public string Name { get; set; } public List<Student> Students { get; set; } } public class Student { public string Id { get; set; } public string Name { get; set; } public int StudentId { get; set; } }
2. 构建查询过滤器并执行查询
有两种常用写法,效果完全一致:
写法一:强类型LINQ表达式(推荐,类型安全)
List<int> studentIds = new List<int> { 12345, 123213, 434233, 234232, 42312, 776433 }; // 指定内嵌文档数组中的StudentId字段作为匹配目标 FilterDefinition<Class> filter = Builders<Class>.Filter.AnyIn(c => c.Students.Select(s => s.StudentId), studentIds); // 执行异步查询并获取结果 var desiredClasses = await database.GetCollection<Class>("Classes").Find(filter).ToListAsync();
写法二:字符串路径写法
如果偏好直接使用MongoDB的字段路径字符串,可以这么写:
List<int> studentIds = new List<int> { 12345, 123213, 434233, 234232, 42312, 776433 }; FilterDefinition<Class> filter = Builders<Class>.Filter.AnyIn("Students.StudentId", studentIds); var desiredClasses = await database.GetCollection<Class>("Classes").Find(filter).ToListAsync();
逻辑说明
这两种写法都会让MongoDB查询所有至少包含一个StudentId在目标列表中的Class文档,和你之前用纯数组的AnyIn逻辑完全一致,只是把匹配目标从整个数组元素,改成了数组元素里的指定子字段。
内容的提问来源于stack exchange,提问作者disruptivebuzzing
相关产品推荐
相关产品推荐

