GridFS on MongoDB:n spesifikaatio suurten tiedostojen, kuten kuvien, äänitiedostojen, videotiedostojen jne. tallentamiseen ja hakuun. Se on eräänlainen tiedostojärjestelmä tiedostojen tallentamiseen, mutta sen tiedot tallennetaan MongoDB-kokoelmiin. GridFS pystyy tallentamaan tiedostoja jopa yli sen dokumenttikokorajan, joka on 16MB.
GridFS jakaa tiedoston palasiin ja tallentaa jokaisen datakappaleen erilliseen dokumenttiin, jonka maksimikoko on 255k.
GridFS käyttää oletusarvoisesti kahta kokoelmaa fs.files ja fs.chunks tallentaakseen tiedoston metatiedot ja palaset. Jokainen chunk tunnistetaan sen yksilöllisellä _id ObjectId-kentällä. fs.files toimii kantadokumenttina. fs.chunks-dokumentin files_id-kenttä linkittää chunkin sen vanhempaan dokumenttiin.
Seuraava on esimerkkidokumentti fs.files-kokoelmasta –
{ "filename": "test.txt", "chunkSize": NumberInt(261120), "uploadDate": ISODate("2014-04-13T11:32:33.557Z"), "md5": "7b762939321e146569b07f72c62cca4f", "length": NumberInt(646)}
Dokumentti määrittää tiedoston nimen, chunkin koon, latauspäivämäärän ja pituuden.
Seuraava on esimerkkidokumentti fs.chunks-dokumentista –
{ "files_id": ObjectId("534a75d19f54bfec8a2fe44b"), "n": NumberInt(0), "data": "Mongo Binary Data"}
Tiedostojen lisääminen GridFS:ään
Tallennamme nyt mp3-tiedoston GridFS:n avulla put-komennolla. Tätä varten käytämme MongoDB:n asennuskansion bin-kansiossa olevaa mongofiles.exe-apuohjelmaa.
Avaa komentorivi, siirry MongoDB:n asennuskansion bin-kansiossa olevaan mongofiles.exe-ohjelmaan ja kirjoita seuraava koodi –
>mongofiles.exe -d gridfs put song.mp3
Tässä gridfs on sen tietokannan nimi, johon tiedosto tallennetaan. Jos tietokantaa ei ole, MongoDB luo automaattisesti uuden asiakirjan lennossa. Song.mp3 on ladattavan tiedoston nimi. Nähdäksesi tiedoston dokumentin tietokannassa voit käyttää find-kyselyä –
>db.fs.files.find()
Yllä oleva komento palautti seuraavan dokumentin –
{ _id: ObjectId('534a811bf8b4aa4d33fdf94d'), filename: "song.mp3", chunkSize: 261120, uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41", length: 10401959 }
Voidaan myös nähdä kaikki fs:ssä olevat chunksit.chunks-kokoelma, joka liittyy tallennettuun tiedostoon, seuraavalla koodilla käyttämällä edellisessä kyselyssä palautettua asiakirjan id:tä –
>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})
Tapauksessani kysely palautti 40 asiakirjaa, mikä tarkoittaa, että koko mp3-dokumentti oli jaettu 40 tietopalaan.