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

GridFS MongoDB

GridFS è una specifica MongoDB utilizzata per memorizzare e recuperare file di grandi dimensioni, come immagini, file audio, video e altro. È simile a un sistema di file per memorizzare file, ma i dati vengono memorizzati in raccolte MongoDB. GridFS può memorizzare file anche più grandi del limite di dimensione dei documenti (16mb).

GridFS suddivide i file in più blocchi e memorizza ogni blocco di dati in un documento separato, con una dimensione massima del file di 255k.

Per impostazione predefinita, GridFS utilizza due raccolte:fs.filesefs.chunksMemorizza i metadati dei file e i blocchi. Ogni blocco è identificato dal campo univoco _id ObjectId. fs.files come documento genitore.files_idIl campo fs.chunks nel documento collega i blocchi ai loro genitori.

Ecco un esempio di documento per la 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.

Ecco un esempio di documento per fs.chunks-

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

Aggiungere il file a GridFS

Ora, useremoputIl comando utilizza GridFS per memorizzare file mp3. Per questo, useremomongofiles.exeUtilità nella cartella bin della cartella di installazione di MongoDB.

Aprire il prompt dei comandi, navigare alla cartella bin della cartella di installazione di MongoDB e digitare il seguente codice-

>mongofiles.exe -d gridfs put song.mp3

quigridfsIl nome del database in cui verranno memorizzati i file. Se il database non esiste, MongoDB crea automaticamente un nuovo documento dinamico. Song.mp3 è il nome del file caricato. Per visualizzare il documento del file nel database, è possibile utilizzare la query find-

>db.fs.files.find()

Il comando sopra ha restituito il seguente documento-

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

Possiamo anche utilizzare il seguente codice per visualizzare tutti i blocchi correlati al file di archiviazione nella collezione fs.chunks utilizzando l'ID del documento restituito dalla query precedente:

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

Per me, questa query ha restituito 40 documenti, il che significa che l'intero documento mp3 è diviso in 40 blocchi di dati.