English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Учебник MongoDB для начинающих

Учебник MongoDB для продвинутых пользователей

GridFS в MongoDB

GridFS - это стандарт MongoDB для хранения и извлечения больших файлов, таких как изображения, аудиофайлы, видеофайлы и т.д. Он ähnelt einem Dateisystem für die Speicherung von Dateien, но его данные хранятся в MongoDB-коллекциях. GridFS может хранить файлы даже больше, чем ограничение размера документов (16mb).

GridFS разбивает файлы на несколько блоков и хранит каждый блок данных в отдельном документе, максимальный размер файла составляет 255k.

По умолчанию GridFS использует два集合а,fs.filesиfs.chunksХранит метаданные файла и блоки. Каждый блок идентифицируется уникальным полем _id ObjectId. fs.files является родительским документом.files_idПоле в документе fs.chunks связывает блоки с их родительским элементом.

Вот пример документа для集合а fs.files-

{
   "filename": "test.txt",
   "chunkSize": NumberInt(261120),
   "uploadDate": ISODate("2014-04-13T11:32:33.557Z"),
   "md5": "7b762939321e146569b07f72c62cca4f",
   "length": NumberInt(646)
}

Этот документ определяет имя файла, размер блока, дату загрузки и длину.

Вот пример документа для документа fs.chunks-

{
   "files_id": ObjectId("534a75d19f54bfec8a2fe44b"),
   "n": NumberInt(0),
   "data": "Mongo Binary Data"
}

добавить файл в GridFS

Теперь мы будем использоватьputКоманда использует GridFS для хранения mp3 файлов. Для этого мы будем использоватьmongofiles.exeУтилиты в папке bin папки установки MongoDB.

Откройте командную строку, перейдите в папку bin в папке установки MongoDB и выполните следующую команду-

>mongofiles.exe -d gridfs put song.mp3

здесьgridfsЭто имя базы данных, в которой будет храниться файл. Если база данных не существует, MongoDB автоматически создаст новый документ. Song.mp3 - это имя загружаемого файла. Чтобы увидеть документ файла в базе данных, можно использовать запрос find-

>db.fs.files.find()

Команда, указанная выше, вернула следующий документ-

{
   _id: ObjectId('534a811bf8b4aa4d33fdf94d'), 
   filename: "song.mp3", 
   chunkSize: 261120, 
   uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
   length: 10401959 
}

Мы также можем использовать следующий код, чтобы просмотреть все блоки, связанные с хранимым файлом, в集合е fs.chunks, используя ID документа, возвращенного в предыдущем запросе:

>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})

Для меня, этот запрос вернул 40 документов, что означает, что весь документ mp3 был разделен на 40 данных блоков.