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

GridFS en MongoDB

GridFS es una especificación de MongoDB para almacenar y recuperar archivos grandes, como imágenes, archivos de audio, archivos de video, etc. Es similar a un sistema de archivos para almacenar archivos, pero sus datos se almacenan en colecciones de MongoDB. GridFS puede almacenar incluso archivos más grandes que el límite de tamaño de documento.16mb) archivos.

GridFS divide los archivos en varios bloques y almacena cada bloque de datos en un documento separado, con un tamaño máximo de archivo de255k.

Por defecto, GridFS utiliza dos colecciones,fs.filesyfs.chunksAlmacena los metadatos del archivo y los bloques. Cada bloque se identifica por su campo único _id ObjectId. fs.files como documento superior.files_idLos campos del documento fs.chunks enlazan los bloques a su documento superior.

A continuación se muestra el documento de ejemplo de la colección fs.files-

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

Este documento especifica el nombre del archivo, el tamaño del bloque, la fecha de carga y la longitud.

A continuación se muestra el documento de ejemplo del documento fs.chunks-

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

Añadir archivo a GridFS

Ahora, utilizaremosputEl comando utiliza GridFS para almacenar mp3Para este propósito, utilizaremosmongofiles.exeUtilidades en la carpeta bin de la carpeta de instalación de MongoDB.

Abra el símbolo del sistema, navegue hasta la carpeta bin de la carpeta de instalación de MongoDB y luego ingrese el siguiente código-

>mongofiles.exe -d gridfs put song.mp3

AquígridfsEs el nombre de la base de datos donde se almacenarán los archivos. Si la base de datos no existe, MongoDB creará automáticamente un nuevo documento dinámicamente. Song.mp3es el nombre del archivo subido. Para ver los documentos de archivos en la base de datos, se puede usar la consulta find-

>db.fs.files.find()

El comando anterior devolvió los siguientes documentos-

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

También podemos usar el siguiente código, utilizando el ID de documento devuelto por la consulta anterior para ver todos los bloques relacionados con el archivo almacenado en la colección fs.chunks:

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

Para mí, esta consulta regresó40 documentos, lo que significa que todo el mp3Los documentos se dividen en40 bloques de datos.