安装 MongoDB.Driver 包是第一步
不装对版本,后面所有代码都跑不起来。用
NuGet安装时务必选官方驱动:
MongoDB.Driver(不是
MongoDB.Driver.Core或旧版
MongoDB.Driver.Legacy)。.NET 6+ 项目推荐用
4.0+版本,它原生支持
async/await,且 API 更统一。
常见错误:手动下载 DLL 或引用低版本,导致
MongoClient构造失败、
InsertOneAsync找不到,或序列化出错。 VS 中右键项目 → “管理 NuGet 包” → 搜索
MongoDB.Driver→ 安装最新稳定版 命令行方式:
dotnet add package MongoDB.Driver确认项目文件里出现类似:
<packagereference include="MongoDB.Driver" version="4.12.0"></packagereference>
连接字符串和 MongoClient 实例不能复用错
MongoClient是线程安全的、重量级对象,**必须全局复用**,不能每次操作都 new 一个。它内部维护连接池,频繁创建会耗尽 socket 资源或触发超时。
典型错误:在 Repository 方法里写
var client = new MongoClient("..."),尤其在 Web API 的 Action 里 —— 请求一多就卡死或报 TimeoutException。 ASP.NET Core 中应注册为单例:
services.AddSingleton<imongoclient>(sp => new MongoClient("mongodb://localhost:27017"))</imongoclient>
控制台程序可声明为 static readonly字段 连接字符串带认证时格式为:
"mongodb://user:pass@localhost:27017/admin?authSource=admin";本地测试可省略认证部分
获取数据库和集合要用 GetDatabase / GetCollection
MongoClient本身不直接操作数据,要先通过
GetDatabase拿到
IMongoDatabase,再用
GetCollection<t></t>获取类型化的
IMongoCollection<t></t>。泛型参数
T决定了序列化行为 —— 驱动会按属性名映射字段,不依赖特性也能工作,但建议加
[BsonElement]明确控制。
容易忽略的点:集合名默认是类名小写(如
User类对应集合
user),但实际开发中常需自定义,比如用
GetCollection<user>("users")</user>。
示例:var db = client.GetDatabase("testdb"); var users = db.GetCollection<user>("users");</user>
User类属性若为
public string Name { get; set; },默认存为 {"Name": "Alice"};加 [BsonElement("name")] 后才存为 {"name": "Alice"}
集合不存在时,首次写入会自动创建,无需提前建表
增删改查必须用 async 方法,别漏掉 await
新版驱动所有 I/O 操作都是异步的,同步方法(如
InsertOne)已被标记为过时,强行使用可能阻塞线程或抛
NotSupportedException。尤其在 ASP.NET Core 中,不用
await会导致上下文丢失、返回空结果或死锁。
典型错误:写
users.InsertOne(new User {...}); 而没加 await,表面看不报错,但数据根本没进库。 插入:
await users.InsertOneAsync(new User { Name = "Bob" });
查询:var result = await users.Find(u => u.Name == "Bob").FirstOrDefaultAsync();更新:
await users.UpdateOneAsync(u => u.Name == "Bob", Builders<user>.Update.Set(u => u.Name, "Robert"));</user>删除:
await users.DeleteManyAsync(u => u.Name.StartsWith("R"));
真正麻烦的不是语法,而是序列化规则和连接生命周期管理。比如
DateTime默认存成 UTC 时间,前端传来的本地时间不转换就会错位;又比如
MongoClient被 GC 回收后,后续请求会静默失败 —— 这些细节比“怎么连上”更值得盯紧。
