如何基于id批量加载MongoDB文档?C#实现相关方法求教
C# 中查询MongoDB指定ID文档并加载到列表的实现方案
前置依赖准备
首先安装MongoDB官方C#驱动NuGet包:MongoDB.Driver
基础环境初始化
先完成客户端、数据库、集合实例的初始化操作:
using MongoDB.Driver; using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; // 初始化MongoDB客户端 var client = new MongoClient("你的MongoDB连接字符串"); // 获取目标数据库 var database = client.GetDatabase("你的数据库名称"); // 获取目标集合,MyModel为你自定义的文档映射类,无预定义模型可直接用BsonDocument var collection = database.GetCollection<MyModel>("你的集合名称");
Filter过滤构造方案
方法1:强类型Filter构造器(可读性最高,推荐)
如果ID是MongoDB默认的ObjectId类型:
var targetId = new ObjectId("要查询的文档ID字符串"); var filter = Builders<MyModel>.Filter.Eq(doc => doc.Id, targetId);
如果是自定义字符串/数值类型的ID,直接传入对应值即可:
var filter = Builders<MyModel>.Filter.Eq(doc => doc.Id, "自定义ID值");
方法2:BsonDocument动态构造(适合无预定义模型的场景)
var filter = new BsonDocument("_id", new ObjectId("目标ID字符串"));
方法3:Lambda简化写法(单条件查询可直接使用)
驱动会自动解析Lambda表达式为Filter语句:
var result = await collection.Find(doc => doc.Id == targetId).ToListAsync();
查询结果加载到列表的实现
优先使用异步方法,性能表现更好:
- 单个ID查询转列表
List<MyModel> resultList = await collection.Find(filter).ToListAsync();
- 多个指定ID批量查询转列表
// 要查询的ID集合 var targetIdList = new List<ObjectId> { ObjectId.Parse("id1"), ObjectId.Parse("id2"), ObjectId.Parse("id3") }; var batchFilter = Builders<MyModel>.Filter.In(doc => doc.Id, targetIdList); List<MyModel> batchResultList = await collection.Find(batchFilter).ToListAsync();
- 同步写法(仅适合简单小场景使用)
List<MyModel> resultList = collection.Find(filter).ToList();
注意事项
自定义映射类的ID字段需要添加[BsonId]特性,确保驱动能正确映射MongoDB内置的_id字段:
public class MyModel { [BsonId] public ObjectId Id { get; set; } // 其他业务字段示例 public string Title { get; set; } public int Count { get; set; } }
如果你的ID用字符串类型存储,直接把Id属性的类型改为string即可,无需做ObjectId转换。
内容的提问来源于stack exchange,提问作者sahil Malik
相关产品推荐
相关产品推荐

