MongoDB - GridFS

GridFSè la specifica MongoDB per l'archiviazione e il recupero di file di grandi dimensioni come immagini, file audio, file video, ecc. È una specie di file system per archiviare file ma i suoi dati sono archiviati all'interno di raccolte MongoDB. GridFS ha la capacità di memorizzare file anche più grandi del suo limite di dimensione del documento di 16 MB.

GridFS divide un file in blocchi e memorizza ogni blocco di dati in un documento separato, ciascuno della dimensione massima 255k.

GridFS per impostazione predefinita utilizza due raccolte fs.files e fs.chunksper memorizzare i metadati del file e i blocchi. Ogni blocco è identificato dal proprio campo _id ObjectId univoco. Il file fs. funge da documento genitore. Ilfiles_id Il campo nel documento fs.chunks collega il blocco al suo genitore.

Di seguito è riportato un documento di esempio della raccolta fs.files -

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

Il documento specifica il nome del file, la dimensione del blocco, la data di caricamento e la lunghezza.

Di seguito è riportato un documento di esempio del documento fs.chunks -

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

Aggiunta di file a GridFS

Ora memorizzeremo un file mp3 usando GridFS usando l'estensione putcomando. Per questo, useremo ilmongofiles.exe utility presente nella cartella bin della cartella di installazione di MongoDB.

Apri il prompt dei comandi, vai a mongofiles.exe nella cartella bin della cartella di installazione di MongoDB e digita il codice seguente:

>mongofiles.exe -d gridfs put song.mp3

Qui, gridfsè il nome del database in cui verrà archiviato il file. Se il database non è presente, MongoDB creerà automaticamente un nuovo documento al volo. Song.mp3 è il nome del file caricato. Per vedere il documento del file nel database, puoi usare la query di ricerca -

>db.fs.files.find()

Il comando precedente ha restituito il seguente documento:

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

Possiamo anche vedere tutti i chunk presenti nella raccolta fs.chunks relativi al file memorizzato con il seguente codice, utilizzando l'id del documento restituito nella query precedente -

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

Nel mio caso, la query ha restituito 40 documenti, il che significa che l'intero documento mp3 è stato diviso in 40 blocchi di dati.