Добавить данные в существующий файл gridfs - PullRequest
3 голосов
/ 08 июня 2011

Как я вижу, драйвер java mongo не позволяет получить OutputStream из существующего файла gridFS com.mongodb.gridfs.GridFSFile

Мне нужно создать GridFSInputFile напрямую или использовать метод gridFs.createFile().

Это недостаток java-драйвера или ограничение gridfs?

Не могли бы вы предложить какой-нибудь обходной путь, кроме создания нового файла / удаления старого?

Спасибо

1 Ответ

4 голосов
/ 08 июня 2011

GridFS - это не основная функция MongoDB, а соглашение о хранении двоичных данных с сопутствующими метаданными. Вы должны иметь возможность изменять любой документ в коллекции fs.chunks обычным способом, сохраняя при этом соответствующий документ в fs.files без изменений. Основной проблемой будет пересчет контрольной суммы MD5, но AFAIK она нигде не используется и является просто «бесплатным» бонусом. В любом случае, это все еще возможно только для добавления изменений (см. Дайджест MD5 для возобновленной загрузки ).

Таким образом, чтобы добавить существующий файл GridFS, вам нужно найти соответствующий документ в fs.files. Затем в зависимости от коэффициента заполнения последнего чанка (length% chunkSize == 0) вы либо переписываете последний документ чанка в fs.chunks с учетом chunkSize, и / или просто добавляете новый чанк (и) с приращением n поле. Следующее обновление length в fs.files и, возможно, другие метаданные.

...