You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者शेखर

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 14:12:05