You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 01:15:42