MongoDB – GridFS

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

GridFS divide el archivo en fragmentos y almacena cada fragmento de datos en un documento separado, cada uno no mayor de 255 KB.

GridFS usa dos colecciones por defecto archivos fs. y fs.chunks para almacenar fragmentos y metadatos de archivos. Cada fragmento se identifica por su campo _id ObjectId único. Los archivos fs. sirven como documento principal. EN files_id el campo fs.chunks del documento vincula el fragmento a su elemento principal.

A continuación se muestra un ejemplo de documento de colección de archivos fs.

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

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

A continuación se muestra un documento de muestra de fs.chunks:

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

Agregar archivos a GridFS

Ahora almacenaremos el archivo mp3 con GridFS usando poner equipo. Para hacer esto, usaremos mongofiles.exe La utilidad se encuentra en la carpeta bin de la carpeta de instalación de MongoDB.

Abra el símbolo del sistema, navegue a mongofiles.exe en la carpeta bin de la carpeta de instalación de MongoDB e ingrese el siguiente código:

>mongofiles.exe -d gridfs put song.mp3

Aquí, gridfs este es el nombre de la base de datos en la que se almacenará el archivo. Si no hay una base de datos, MongoDB creará automáticamente un nuevo documento sobre la marcha. Song.mp3 es el nombre del archivo descargado. Para ver el documento del archivo en la base de datos, puede utilizar la consulta de búsqueda –

>db.fs.files.find()

El comando anterior devolvió el siguiente documento:

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

También podemos ver todos los fragmentos presentes en la colección fs.chunks asociados con el archivo guardado con el siguiente código utilizando el ID de documento devuelto en la solicitud anterior:

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

En mi caso, la consulta arrojó 40 documentos, lo que significa que todo el documento mp3 se dividió en 40 bloques de datos.

🚫