GridFS er MongoDB-specifikationen til lagring og hentning af store filer som f.eks. billeder, lydfiler, videofiler osv. Det er en slags filsystem til opbevaring af filer, men dets data opbevares i MongoDB-samlinger. GridFS har mulighed for at lagre filer, der er endnu større end dets grænse for dokumentstørrelse på 16 MB.
GridFS opdeler en fil i chunks og gemmer hver chunk af data i et separat dokument, hver med en maksimal størrelse på 255k.
GridFS bruger som standard to samlinger fs.files og fs.chunks til at lagre filens metadata og chunks. Hver chunk er identificeret ved sit unikke _id ObjectId-felt. fs.files fungerer som et overordnet dokument. Feltet files_id i dokumentet fs.chunks linker chunken til dens overordnede dokument.
Følgende er et eksempeldokument for samlingen fs.files –
{ "filename": "test.txt", "chunkSize": NumberInt(261120), "uploadDate": ISODate("2014-04-13T11:32:33.557Z"), "md5": "7b762939321e146569b07f72c62cca4f", "length": NumberInt(646)}
Dokumentet angiver filnavn, chunk-størrelse, uploaded dato og længde.
Følgende er et eksempeldokument af fs.chunks-dokumentet –
{ "files_id": ObjectId("534a75d19f54bfec8a2fe44b"), "n": NumberInt(0), "data": "Mongo Binary Data"}
Tilføjelse af filer til GridFS
Nu vil vi gemme en mp3-fil ved hjælp af GridFS ved hjælp af put-kommandoen. Til dette vil vi bruge værktøjet mongofiles.exe, der findes i bin-mappen i MongoDB-installationsmappen.
Åbn din kommandoprompt, naviger til mongofiles.exe i bin-mappen i MongoDB-installationsmappen, og indtast følgende kode –
>mongofiles.exe -d gridfs put song.mp3
Her er gridfs navnet på den database, som filen skal gemmes i. Hvis databasen ikke er til stede, vil MongoDB automatisk oprette et nyt dokument i farten. Song.mp3 er navnet på den fil, der uploades. For at se filens dokument i databasen kan du bruge find-forespørgsel –
>db.fs.files.find()
Overstående kommando returnerede følgende dokument –
{ _id: ObjectId('534a811bf8b4aa4d33fdf94d'), filename: "song.mp3", chunkSize: 261120, uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41", length: 10401959 }
Vi kan også se alle de chunks, der er til stede i fs.chunks collection relateret til den lagrede fil med følgende kode ved hjælp af det dokument-id, der blev returneret i den foregående forespørgsel –
>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})
I mit tilfælde returnerede forespørgslen 40 dokumenter, hvilket betyder, at hele mp3-dokumentet var opdelt i 40 chunks af data.