MongoDB C# Driver 2.13.0文档大小计算异常问题
问题与解决方案
问题
使用MongoDB C# Driver 2.13.0(配套MongoDB.Bson 2.13.0)插入记事本显示KB级大小的数据时,抛出异常:
System.FormatException: Size 16948171 is larger than MaxDocumentSize 16793600
但通过MongoDB Shell插入相同数据时无大小限制报错,而MongoDB官方规定单文档最大限制为16MB。
排查方向与解决办法
- 确认Bson序列化后的实际体积:记事本中的文本大小≠Bson序列化后的大小。C#对象转Bson时,字符串的UTF-8编码、嵌套结构、未忽略的冗余字段(如默认值、继承属性)都会导致体积膨胀。可以在插入前先计算序列化后的大小:
var yourDocument = new { /* 你的数据对象 */ }; var serializedBson = BsonSerializer.Serialize(yourDocument); Console.WriteLine($"序列化后Bson大小:{serializedBson.Length} 字节"); - 检查驱动的文档大小限制配置:默认情况下驱动应遵循MongoDB的16MB(16777216字节)限制,若报错中的
MaxDocumentSize为16793600,需确认是否在MongoClientSettings中自定义修改过该值,或是否存在驱动版本的计算偏差。 - 对比Shell与C#插入的文档结构:用Shell插入数据后,执行
db.collection.find().forEach(doc => printjson(Object.bsonsize(doc)))查看实际存储的Bson大小,再与C#序列化后的大小对比。若两者差异大,说明C#对象结构与Shell插入的文档不一致,需检查是否有多余字段或数据类型差异。 - 排查循环引用与冗余数据:若C#对象存在循环引用,序列化时会生成大量重复数据导致体积暴增。使用
[BsonIgnore]特性标记无需序列化的字段,或调整序列化配置禁用循环引用处理。 - 验证驱动版本问题:尝试升级到MongoDB C# Driver 2.13.x系列的最新补丁版本,确认是否存在已知的Bson序列化体积计算bug。
内容的提问来源于stack exchange,提问作者शेखर
相关产品推荐
相关产品推荐

