MongoDB Java GridFSFile устаревший тип документа в 3.6
Похоже, что класс GridFSFile устарел метод getContentType(). Они сказали, что информация о типе контента должна храниться в поле метаданных.
К сожалению, я не могу понять, как написать тип контента, как новый API (тот, который смотрит в метаданных), так и старый API (тот, который смотрел в обычных данных).
Просто для ясности:
{
"_id" : ObjectId("5a8600e97f0e2df85d8df68b"),
"filename" : "350c0e82337fcba3da9a8dc129919fc4",
"length" : NumberLong(12869),
"chunkSize" : 261120,
"uploadDate" : ISODate("2018-02-15T21:51:37.478Z"),
"md5" : "350c0e82337fcba3da9a8dc129919fc4",
"metadata" : {
"content_type" : "png"
}
}
по сравнению со старым форматом:
{
"_id" : ObjectId("54384ce8e1b64990eb0bb110"),
"filename" : "71727da052530862d4ad26f6b0114419",
"aliases" : null,
"chunkSize" : NumberLong(262144),
"uploadDate" : ISODate("2014-10-10T21:17:28.469Z"),
"length" : NumberLong(65368),
"contentType" : "pdf",
"md5" : "71727da052530862d4ad26f6b0114419"
}
Обратите внимание на расположение типа контента - в одном он находится на верхнем уровне, в другом - внутри подобъекта метаданных.
Устаревший метод в новом API не будет работать при вызове чего-либо, хранящегося без ключа contentType на верхнем уровне - он выдает исключение (Исключение в потоке "AWT-EventQueue-0" com.mongodb.MongoGridFSException: нет данных contentType для этот файл GridFS).
У меня есть смесь вещей, которые получают доступ к данным с использованием старого API и нового API, но для меня не очевидно, как записать данные в базу данных как с помощью старого, так и нового способа представления типа контента. Лучшая идея-кандидат, с которой я столкнулся, - это написать документ с использованием нового стиля с метаданными, а затем ex post facto отредактировать часть в коллекции fs.files, чтобы иметь ключ contentType на верхнем уровне. Есть ли более разумный способ справиться с этим?