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

MongoDB Java驱动程序在存储大于16MB的数据时通常会给出BSonMaximumSizeExceedeException,但有时会给出MongoWriteException,java,mongodb,mongodb-java,Java,Mongodb,Mongodb Java,我的代码按以下方式工作 我有一个保存在MongoDB集合中的文档,我获取该文档。 2在Java层更新此文档,在数组类型的键中添加值 然后使用MongoCollection.java类的replaceOne()函数(upsert为true),将_id作为过滤器传递,将完整对象作为要替换的对象传递 如果此文档Bson大小大于16MB,则会给出BSonMaximumSizeExceedeException,我将捕获它,并在catch块中将此文档保存在GridFS中 如果此文档的大小小于16MB,则会被

我的代码按以下方式工作

  • 我有一个保存在MongoDB集合中的文档,我获取该文档。 2在Java层更新此文档,在数组类型的键中添加值
  • 然后使用MongoCollection.java类的replaceOne()函数(upsert为true),将_id作为过滤器传递,将完整对象作为要替换的对象传递
  • 如果此文档Bson大小大于16MB,则会给出BSonMaximumSizeExceedeException,我将捕获它,并在catch块中将此文档保存在GridFS中
  • 如果此文档的大小小于16MB,则会被替换
  • 所以在第4步中,我期望99%的时间得到BsonMaximumSizeExceedeException,但这一到两次我得到了MongoWriteException

    MongoWriteException的描述也类似于BSonMaximumSizeExcepedException 例外情况是这样的

    原因:com.mongodb.MongoWriteException:写入结果不可用于::原因::BSONObj大小:16793731(0x1004083)无效。大小必须介于0和16793600(16MB)之间

    有人能解释为什么我没有得到BsonMaximumSizeExceedeException,而是得到MongoWriteException吗

    或者在Java层是否有其他方法可以知道我的文档已增长到16MB以上?

    Kishore Babu Diyyana

    BSON文档的最大大小为16 MB

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

    Kishore Babu Diyyana

    BSON文档的最大大小为16 MB


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

    请参阅第二个答案。它解释了如何在编写BSON对象之前获取其大小。我有一个java对象,根据注释获取大小,我必须首先转换为BsonDocument,然后转换为Json文档。我认为对于这样一个简单的任务来说,这是一个很大的转变。还有其他可用的wat吗?参见第二个答案。它解释了如何在编写BSON对象之前获取其大小。我有一个java对象,根据注释获取大小,我必须首先转换为BsonDocument,然后转换为Json文档。我认为对于这样一个简单的任务来说,这是一个很大的转变。还有其他可用的wat吗?