Mongodb Gridfs
# MongoDB GridFS
GridFS is used for storing and retrieving files that exceed the 16MB BSON document size limit (e.g., images, audio, video, etc.).
GridFS is also a method of file storage, but it stores files in MongoDB collections.
GridFS can better store files larger than 16MB.
GridFS will split large file objects into multiple small chunks (file fragments), typically 256KB each. Each chunk is stored as a MongoDB document in the `chunks` collection.
GridFS uses two collections to store a file: `fs.files` and `fs.chunks`.
The actual content of each file is stored in the `chunks` (binary data), and the metadata related to the file (filename, content_type, and user-defined attributes) is stored in the `files` collection.
Here is a simple `fs.files` collection document:
{ "filename": "test.txt", "chunkSize": NumberInt(261120), "uploadDate": ISODate("2014-04-13T11:32:33.557Z"), "md5": "7b762939321e146569b07f72c62cca4f", "length": NumberInt(646)}
Here is a simple `fs.chunks` collection document:
{ "files_id": ObjectId("534a75d19f54bfec8a2fe44b"), "n": NumberInt(0), "data": "Mongo Binary Data"}
* * *
## GridFS Adding Files
Now we use the GridFS `put` command to store an mp3 file. We call the `mongofiles.exe` tool located in the `bin` directory of the MongoDB installation.
Open the command prompt, navigate to the `bin` directory of the MongoDB installation, find `mongofiles.exe`, and enter the following code:
>mongofiles.exe -d gridfs put song.mp3
`-d gridfs` specifies the name of the database to store the file. If the database does not exist, MongoDB will automatically create it. `song.mp3` is the audio filename.
Use the following command to view the file document in the database:
>db.fs.files.find()
After executing the above command, it returns the following document data:
{ _id: ObjectId('534a811bf8b4aa4d33fdf94d'), filename: "song.mp3", chunkSize: 261120, uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41", length: 10401959 }
We can see all the chunks in the `fs.chunks` collection. Here we get the file's `_id` value, and we can use this `_id` to retrieve the chunk data:
>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})
In the above example, the query returns 40 documents, meaning the mp3 file is stored in 40 chunks.
YouTip