Коллекция GridFS: как получить общий размер всех загруженных файлов? - PullRequest
1 голос
/ 04 июля 2019

У нас есть приложение метеор / узел (вилка wekan) и базовый mongodb.Для хранения файлов мы используем GridFS.

Я знаю, что в метаданных в коллекции файлов при загрузке документа сохраняется размер этого документа как свойство длины (поправьте меня, если я ошибаюсь).

Итак, мне было интересно, есть ли способ получить полный размер всех файлов, не анализируя (добавляя) их вручную?

1 Ответ

1 голос
/ 04 июля 2019

Все файлы в GridFS хранятся в fs.files и fs.chunks, где блок имеет размер по умолчанию 255 КБ

Таким образом, вы можете получить весь размер в килобайтах, вычислив

fs.chunks.find().count() * 255

Обратите внимание, что это предполагает, что вы используете значение по умолчанию db.fs в качестве корзины GridFS и размер фрагмента по умолчанию.

В Метеоре вы можете получить Коллекции Сетки, как и любую другую коллекцию:

const FsChunks = new Mongo.Collection('fs.chunks')

Редактировать: этот метод несколько неточен, потому что

Последний кусок только настолько большой, насколько это необходимо. Аналогично, файлы, размер которых не превышает размер чанка, имеют только окончательный чанк, который использует только столько места, сколько необходимо, плюс некоторые дополнительные метаданные.

Таким образом, вы получите результат, значительно превышающий реальный размер, с увеличением количества файлов. Это не составит большой проблемы, если у вас есть несколько больших файлов.

Однако для других методов все еще требуется aggregate, который уже был хорошо описан , хорошо описан , или ручной обход fs.files и суммирование его свойства length.

...