Мой код работает следующим образом.
- У меня есть документ, сохраненный в коллекции MongoDB, я получаю этот документ.2 Обновите этот документ на уровне Java, добавьте значения в ключ типа массива.
- Затем, используя функцию replaceOne () (с upsert в качестве true) класса MongoCollection.java, я передаю _id в качестве фильтра изавершить объект как заменяемый объект.
- Если размер Bson этого документа превышает 16 МБ, это дает исключение BSONMaximumSizeExceededException, я его ловлю и в блоке catch я сохраняю этот документ в GridFS.
- Если размер этого документа меньше 16 МБ, он заменяется.
Итак, на шаге 4 я ожидаю, и 99% раз получаю BSONMaximumSizeExceededException, но один-два раза я получал MongoWriteException.
Описание MongoWriteException также похоже на BSONMaximumSizeExceededException. Исключение выглядит следующим образом
. Причина: com.mongodb.MongoWriteException: запись результатов, недоступных из :: вызвано :: BSONObj; размер: 16793731 (0x1004083):недействительным.Размер должен быть между 0 и 16793600 (16 МБ).
Может кто-нибудь объяснить, почему я не получил BSONMaximumSizeExceededException и вместо этого получил MongoWriteException?
Или есть какой-то другой способ, которым я могу узнать на уровне Java, чтомой документ стал больше 16 МБ?