当存储大于16MB的数据时,MongoDB Java驱动程序通常会给出BSONMaximumSizeExceededException,但有时会给出MongoWriteException

时间:2019-06-12 13:30:18

标签: java mongodb mongodb-java

我的代码按以下方式工作。

  1. 我有一个保存在MongoDB集合中的文档,我提取了该文档。 2在Java层上更新此文档,在数组类型的键中添加值。
  2. 然后使用MongoCollection.java类的replaceOne()函数(upsert为true),将_id传递为过滤器,并将完整的对象传递为要替换的对象。
  3. 如果此文档的Bson大小大于16 MB,则给出BSONMaximumSizeExceededException,我将其捕获,并在catch块中将该文档保存在GridFS中。
  4. 如果该文档的大小小于16MB,则会将其替换。

因此,在第4步中,我希望有99%的时间获得BSONMaximumSizeExceededException,但是这是我获得MongoWriteException的一两次。

MongoWriteException的描述也类似于BSONMaximumSizeExceededException 异常是这样的

由以下原因引起:com.mongodb.MongoWriteException:由于:: BSONObj引起的::写入结果无效:大小:16793731(0x1004083)无效。大小必须介于0到16793600(16MB)之间。

有人可以解释为什么我没有得到BSONMaximumSizeExceededException而是为什么得到了MongoWriteException吗?

或者在Java层上还有其他方法可以知道我的文档已经超过16MB吗?

1 个答案:

答案 0 :(得分:0)

Kishore Babu Diyyana https://docs.mongodb.com/manual/reference/limits/

BSON文档的最大大小为16 MB。

最大文档大小有助于确保单个文档不会使用过多的RAM或在传输过程中占用过多的带宽。要存储大于最大大小的文档,MongoDB提供了GridFS API。有关GridFS的更多信息,请参见mongofiles和驱动程序的文档。