在平时的开发中,InsertOneUpdateOneFindDeleteOne 这四个方法几乎覆盖了 MongoDB 的日常操作,但很多人直接套用示例代码时,往往会遇到空引用异常或无效操作异常——根本原因不是语法错误,而是驱动版本升级后,BsonDocument 的构造逻辑和异步支持方式发生了变化。

C#怎么操作MongoDB数据库_C# MongoDB驱动增删改查教程【实战】

InsertOneAsync 而不是 Insert,否则会阻塞线程

旧版驱动(比如 1.x 时代)允许同步插入:collection.Insert(doc);但 2.10+ 版本已经彻底移除了这个方法,只保留异步入口。如果强行用同步包装(比如 .Result),在 ASP.NET Core 中极易引发死锁。

Find 查询时过滤器写法不匹配,查不到数据却无报错

Find 方法接受 FilterDefinition,不是随便传个 BsonDocument 就行。常见错误是把 JSON 字符串或裸 BsonDocument 直接塞进去,结果过滤器被忽略,返回全量数据(或者空结果)。

DeleteOneDeleteMany 的返回值容易被忽略

删除操作不抛异常,绝不等于成功删除了文档。驱动返回 DeleteResult,其中 DeletedCount 才是真实删除数量——常见陷阱是只检查是否抛异常,却没验证 result.DeletedCount > 0

更新操作必须显式指定字段,$set 不是默认行为

UpdateOne 默认是“替换整个文档”,不是“局部更新”。如果传一个不带 _id 的实体进去,原 _id 会被丢弃,MongoDB 自动生成新 _id,旧文档其实还在。

真正难的不是写对某一行代码,而是每个操作背后隐含的语义约束:插入是否要校验唯一索引、查询是否用了未建索引的字段、更新是否触发了 TTL 或变更流——这些不会在编译时报错,但上线后立刻暴露。

本文转载于:https://www.php.cn/faq/2334245.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。