GridFS je specifikace MongoDB pro ukládání a načítání velkých souborů, jako jsou obrázky, zvukové soubory, video soubory atd. Je to něco jako souborový systém pro ukládání souborů, ale jeho data jsou uložena v rámci kolekcí MongoDB. GridFS má možnost ukládat soubory i větší, než je jeho limit velikosti dokumentu 16 MB.
GridFS rozděluje soubor na kousky a každý kousek dat ukládá do samostatného dokumentu, každý o maximální velikosti 255 kB.
GridFS ve výchozím nastavení používá dvě kolekce fs.files a fs.chunks pro ukládání metadat souboru a kousků. Každý chunk je identifikován svým jedinečným polem _id ObjectId. Sbírka fs.files slouží jako nadřazený dokument. Pole files_id v dokumentu fs.chunks spojuje chunk s jeho nadřazeným dokumentem.
Následující příklad je ukázka dokumentu kolekce fs.files –
{ "filename": "test.txt", "chunkSize": NumberInt(261120), "uploadDate": ISODate("2014-04-13T11:32:33.557Z"), "md5": "7b762939321e146569b07f72c62cca4f", "length": NumberInt(646)}
Dokument uvádí název souboru, velikost chunku, datum nahrání a délku.
Následuje ukázka dokumentu sbírky fs.chunks –
{ "files_id": ObjectId("534a75d19f54bfec8a2fe44b"), "n": NumberInt(0), "data": "Mongo Binary Data"}
Přidání souborů do systému GridFS
Nyní uložíme soubor mp3 pomocí systému GridFS pomocí příkazu put. K tomu použijeme nástroj mongofiles.exe, který se nachází ve složce bin instalační složky MongoDB.
Otevřete příkazový řádek, přejděte na nástroj mongofiles.exe ve složce bin instalační složky MongoDB a zadejte následující kód –
>mongofiles.exe -d gridfs put song.mp3
Zde je gridfs název databáze, do které bude soubor uložen. Pokud databáze není přítomna, MongoDB automaticky vytvoří nový dokument za běhu. Song.mp3 je název nahrávaného souboru. Chcete-li zobrazit dokument souboru v databázi, můžete použít dotaz find –
>db.fs.files.find()
Výše uvedený příkaz vrátil následující dokument –
{ _id: ObjectId('534a811bf8b4aa4d33fdf94d'), filename: "song.mp3", chunkSize: 261120, uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41", length: 10401959 }
Můžeme také zobrazit všechny chunky přítomné v fs.chunks collection vztahující se k uloženému souboru pomocí následujícího kódu, přičemž použijeme id dokumentu vráceného v předchozím dotazu –
>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})
V mém případě dotaz vrátil 40 dokumentů, což znamená, že celý dokument mp3 byl rozdělen na 40 kusů dat.
.