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

C# MongoDB投影查询后如何将BsonValue转为int数组并保留类型信息

解决C# MongoDB投影查询保留自定义类类型的问题

方案1:直接指定Project的泛型类型为Record

MongoDB .NET驱动支持直接将投影后的结果映射回原Record类,只需在Project方法中明确指定泛型参数。驱动会自动将投影字段映射到对应属性,未投影的字段会被设为默认值(如null),无需手动转换BsonValue。

修改后的代码示例:

var projection = Builders<Record>.Projection.Include("a");
// 明确指定Project的泛型类型为Record,驱动自动完成映射
List<Record> list = collection.Find(filter)
                              .Project<Record>(projection)
                              .ToList();

此时list中的每个Record对象,a字段会被正确解析为int[],其他未投影的字段(如b、c等)为null,可直接按Record类型操作。

方案2:使用匿名类型实现灵活投影(无需新建类)

如果不想保留原类的空字段,也可以用匿名类型接收投影结果,同样无需手动转换数组类型:

var result = collection.Find(filter)
                       .Project(r => new { r.a })
                       .ToList();
// 直接访问result[0].a即可得到int[]类型的数组

这种方式无需定义新类,适合临时的、不同字段组合的投影场景,驱动会自动完成匿名类型的属性映射。

原代码返回BsonDocument的原因

你原来的代码中Project(projection)未指定泛型参数,驱动默认返回BsonDocument,需要手动处理类型转换。而指定泛型参数后,驱动会利用内置的序列化/反序列化逻辑,自动将Bson数据映射到目标类的属性,包括数组类型的转换。

内容的提问来源于stack exchange,提问作者Double Sugar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:52:17