Драйвер Java MongoDB при хранении данных размером более 16 МБ обычно дает исключение BSONMaximumSizeExceededException, но иногда дает исключение MongoWriteException - PullRequest
1 голос
/ 12 июня 2019

Мой код работает следующим образом.

  1. У меня есть документ, сохраненный в коллекции MongoDB, я получаю этот документ.2 Обновите этот документ на уровне Java, добавьте значения в ключ типа массива.
  2. Затем, используя функцию replaceOne () (с upsert в качестве true) класса MongoCollection.java, я передаю _id в качестве фильтра изавершить объект как заменяемый объект.
  3. Если размер Bson этого документа превышает 16 МБ, это дает исключение BSONMaximumSizeExceededException, я его ловлю и в блоке catch я сохраняю этот документ в GridFS.
  4. Если размер этого документа меньше 16 МБ, он заменяется.

Итак, на шаге 4 я ожидаю, и 99% раз получаю BSONMaximumSizeExceededException, но один-два раза я получал MongoWriteException.

Описание MongoWriteException также похоже на BSONMaximumSizeExceededException. Исключение выглядит следующим образом

. Причина: com.mongodb.MongoWriteException: запись результатов, недоступных из :: вызвано :: BSONObj; размер: 16793731 (0x1004083):недействительным.Размер должен быть между 0 и 16793600 (16 МБ).

Может кто-нибудь объяснить, почему я не получил BSONMaximumSizeExceededException и вместо этого получил MongoWriteException?

Или есть какой-то другой способ, которым я могу узнать на уровне Java, чтомой документ стал больше 16 МБ?

...