MongoDB GridFS
GridFS se utiliza para almacenar y recuperar archivos que superan los 16M (límite de archivos BSON) (por ejemplo: imágenes, audio, video, etc.).
GridFS también es una forma de almacenamiento de archivos, pero se almacena en colecciones de MongoDB.
GridFS puede almacenar mejor archivos mayores de 16M.
GridFS divide el objeto de archivo grande en múltiples chunks (fragmentos de archivo) pequeños, generalmente 256k cada uno. Cada chunk se almacena como un documento de MongoDB en la colección chunks.
GridFS usa dos colecciones para almacenar un archivo: fs.files y fs.chunks.
El contenido real de cada archivo se almacena en chunks (datos binarios), y los metadatos relacionados con el archivo (filename, content_type, y atributos definidos por el usuario) se almacenarán en la colección files.
El siguiente es un documento simple 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)
}
El siguiente es un documento simple de la colección fs.chunks:
{
"files_id": ObjectId("534a75d19f54bfec8a2fe44b"),
"n": NumberInt(0),
"data": "Mongo Binary Data"
}
GridFS Agregar archivo
Ahora usamos el comando put de GridFS para almacenar archivos mp3. Llame a la herramienta mongofiles.exe en el directorio bin del directorio de instalación de MongoDB.
Abra el símbolo del sistema, ingrese al directorio bin del directorio de instalación de MongoDB, busque mongofiles.exe e ingrese el siguiente código:
>mongofiles.exe -d gridfs put song.mp3
-d gridfsEspecifique el nombre de la base de datos donde se almacena el archivo. Si la base de datos no existe, MongoDB la creará automáticamente. Si la base de datos no existe, MongoDB la creará automáticamente. Song.mp3 es el nombre del archivo de audio.
Use el siguiente comando para ver el documento del archivo en la base de datos:
>db.fs.files.find()
Después de ejecutar el comando anterior, se devuelven los siguientes datos de documento:
{
_id: ObjectId('534a811bf8b4aa4d33fdf94d'),
filename: "song.mp3",
chunkSize: 261120,
uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
length: 10401959
}
Podemos ver todos los bloques en la colección fs.chunks. A continuación obtuvimos el valor _id del archivo. Podemos obtener los datos del bloque (chunk) según este _id:
>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})
En el ejemplo anterior, la consulta devolvió datos de 40 documentos, lo que significa que el archivo mp3 se almacena en 40 bloques.
Otras extensiones