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
相关产品推荐
相关产品推荐

