

{"id":48937,"date":"2019-02-11T14:14:45","date_gmt":"2019-02-11T08:44:45","guid":{"rendered":"https:\/\/data-flair.training\/blogs\/?p=48937"},"modified":"2021-05-09T13:07:16","modified_gmt":"2021-05-09T07:37:16","slug":"mongodb-gridfs-tutorial","status":"publish","type":"post","link":"https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/","title":{"rendered":"MongoDB GridFS with Example, Modules, Indexes and Sharding"},"content":{"rendered":"<p>The last session was Rockmongo in MongoDB. Here, we will study\u00a0GridFS\u00a0 in\u00a0MongoDB. In this\u00a0GridFS Tutorial, we will study what is MongoDB\u00a0GridFS and its modules, indexes and sharding with examples. Moreover, we will learn the two type of GridFS in MongoDB: chunks and file with their sub types.<\/p>\n<h2>What is MongoDB GridFS?<\/h2>\n<p><em>MongoDB GridFS is used to store and retrieve files that exceeds the BSON document size limit of 16 MB<\/em>. Instead of storing it all in one document GridFS divides the file into small parts called as <strong>chunks<\/strong>.<\/p>\n<p>The default size for a chunk is 255kb, it is applicable for all chunks except the last one, which can be as large as necessary.<\/p>\n<p>MongoDB GridFS uses two collections to store files. One is used to store the file chunks and the second one to store file metadata. When we query GridFS for a file, the driver reassemble the chunks as nedded. With MongoDB GridFS, we can perform a range of queries on files stored.<\/p>\n<p>GridFS is not only useful to store files that exceed 16 MB but also for storing files that you want to access without loading the entire file into memory.<\/p>\n<p>GridFS places the collection in a common bucket by prefixing each with the bucket name. By default, it uses two collections with a bucket named fs:<\/p>\n<ol>\n<li><strong>fs.files<\/strong><\/li>\n<li><strong>fs.chunks<\/strong><\/li>\n<\/ol>\n<p>It\u2019s upto you for naming a bucket, it can be any name, and also you can create multiple buckets in a single database.<\/p>\n<h2>MongoDB GridFS Modules<\/h2>\n<p>There are two types of GridFS Modules in MongoDB, let&#8217;s discuss them with their sub-types:<\/p>\n<ol>\n<li>The chucks collection<\/li>\n<li>The file collection<\/li>\n<\/ol>\n<h3>i. The chunks collection<\/h3>\n<p>Document in this collection have following form:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">{\r\n   \"_id\" : &lt;ObjectId&gt;,\r\n   \"files_id\" : &lt;ObjectId&gt;,\r\n   \"n\" : &lt;num&gt;,\r\n   \"data\" : &lt;binary&gt;\r\n}<\/pre>\n<p>A document from chunk collection contains following fields:<\/p>\n<ul>\n<li><strong>chunks._id<\/strong><\/li>\n<\/ul>\n<p>Unique ObjectId of the chunk.<\/p>\n<ul>\n<li><strong>chunks.files_id<\/strong><\/li>\n<\/ul>\n<p>We can specify the _id of the parent document in the files collection.<\/p>\n<ul>\n<li><strong>chunks.n<\/strong><\/li>\n<\/ul>\n<p>Sequence number of the chunk. The numbering starts from 0.<\/p>\n<ul>\n<li><strong>chunks.data<\/strong><\/li>\n<\/ul>\n<p>The chunk\u2019s payload as a BSON Binary type.<\/p>\n<h3><strong>ii. The files collection<\/strong><\/h3>\n<p>Documents in this collection have following form:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">{\r\n    \"_id\" : &lt;ObjectId&gt;,\r\n    \"length\" : &lt;num&gt;,\r\n    \"chunkSize\" : &lt;num&gt;,\r\n    \"uploadDate\" : &lt;timestamp&gt;,\r\n    \"md5\" : &lt;hash&gt;,\r\n    \"filename\" : &lt;string&gt;,\r\n    \"contentType\" : &lt;string&gt;,\r\n    \"aliases\" : &lt;string array&gt;,\r\n    \"metadata\" : &lt;any&gt;,\r\n}\r\n\r\n<\/pre>\n<p>A document from files collection contains following fields:<\/p>\n<ul>\n<li><strong>files._id<\/strong><\/li>\n<\/ul>\n<p>It is a unique identifier for this document. The _id is of the same data type that you choose for original document.<\/p>\n<ul>\n<li><strong>files.length<\/strong><\/li>\n<\/ul>\n<p>Size of document in bytes.<\/p>\n<ul>\n<li><strong>files.chunkSize<\/strong><\/li>\n<\/ul>\n<p>The size of each chunk in bytes. The default size is 255 kB.<\/p>\n<ul>\n<li><strong>files.uploadDate<\/strong><\/li>\n<\/ul>\n<p>It gives the date the document was first stored by GridFS.<\/p>\n<ul>\n<li><strong>files.md5<\/strong><\/li>\n<\/ul>\n<p>An MD5 hash of the complete file returned by the filemd5 command. It is of string type.<\/p>\n<ul>\n<li><strong>files.filename<\/strong><\/li>\n<\/ul>\n<p>It is optional. A human-readable name for the GridFS file.<\/p>\n<ul>\n<li><strong>files.contentType<\/strong><\/li>\n<\/ul>\n<p>It is optional. A valid MIME type for the GridFS file.<\/p>\n<ul>\n<li><strong>files.aliases<\/strong><\/li>\n<\/ul>\n<p>It is optional. An array of alias strings.<\/p>\n<ul>\n<li><strong>files.metadata<\/strong><\/li>\n<\/ul>\n<p>It is optional. Here, we store the additional information and metadata filed can be of any data.<\/p>\n<h2>MongoDB GridFS Indexes<\/h2>\n<p>MOngoDB GridFS uses indexes on each of the chunks and files collections for efficiency. You can create any additional indexes as desired to suit your application\u2019s needs.<\/p>\n<ol>\n<li>The chunks Index<\/li>\n<li>The file index<\/li>\n<\/ol>\n<h4>i. The chunks index<\/h4>\n<p>It uses a unique, compound index on the chunks collection using the files_id and n fields. It allows efficient retrieval of chunks, as shown in the below example:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">db.fs.chunks.find( { files_id: myFileID } ).sort( { n: 1 } )<\/pre>\n<p>If by any chance this index does not exist, you can issue this operation to create it using mongo shell:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">db.fs.chunks.createIndex( { files_id: 1, n: 1 }, { unique: true } );<\/pre>\n<h4>ii. The files index<\/h4>\n<p>It uses an index on the files collection using filename and UploadDate fields. It allows for efficient retrieval of files, as shown in the example below:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">db.fs.files.find( { filename: myFileName } ).sort( { uploadDate: 1 } )<\/pre>\n<p>If by any chance this index does not exist, you can issue this operation to create it using mongo shell:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">db.fs.files.createIndex( { filename: 1, uploadDate: 1 } );<\/pre>\n<h2>MongoDB GridFS Sharding<\/h2>\n<p>As we had discussed earlier that GridFS consists of two collections named as files and chunks.<\/p>\n<h4>i. The chunks collection<\/h4>\n<p>To shard the chunks collections, use {files_id : 1, n : 1} or {files_id : 1} as the shard key index.<\/p>\n<h4>ii. The files collection<\/h4>\n<p>The files collection is small and only contains metadata. No keys of GridFS lend themselves to an even distribution in a sharded environment. Doing this allows all the file metadata documents to live on a primary shard.<\/p>\n<h2>How to Read and Write files in MongoDB GridFS?<\/h2>\n<p>For writing to a file in MongoDB using the following code in VScode.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">\/\/1. Load the mongoose driver\r\nvar mongooseDrv = require(\"mongoose\");\r\n\/\/2. Connect to MongoDB and its database\r\nmongooseDrv.connect('mongodb:\/\/localhost\/filesDB', { useMongoClient: true });\r\n\/\/3. The Connection Object\r\nvar connection = mongooseDrv.connection;\r\nif (connection !== \"undefined\") {\r\n\u00a0\u00a0\u00a0\u00a0console.log(connection.readyState.toString());\r\n\u00a0\u00a0\u00a0\u00a0\/\/4. The Path object\r\n\u00a0\u00a0\u00a0\u00a0var path = require(\"path\");\r\n\u00a0\u00a0\u00a0\u00a0\/\/5. The grid-stream\r\n\u00a0\u00a0\u00a0\u00a0var grid = require(\"gridfs-stream\");\r\n\u00a0\u00a0\u00a0\u00a0\/\/6. The File-System module\r\n\u00a0\u00a0\u00a0\u00a0var fs = require(\"fs\");\r\n\u00a0\u00a0\u00a0\u00a0\/\/7.Read the video\/image file from the videoread folder\r\n\u00a0\u00a0\u00a0\u00a0var filesrc = path.join(__dirname, \".\/filestoread\/example.png\");\r\n\u00a0\u00a0\u00a0\u00a0\/\/8. Establish connection between Mongo and GridFS\r\n\u00a0\u00a0\u00a0\u00a0Grid.mongo = mongooseDrv.mongo;\r\n\u00a0\u00a0\u00a0\u00a0\/\/9.Open the connection and write file\r\n\u00a0\u00a0\u00a0\u00a0connection.once(\"open\", () =&gt; {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(\"Connection Open\");\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var gridfs = grid(example.db);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (gridfs) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/9a. create a stream, this will be\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/used to store file in database\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var streamwrite = gridfs.createWriteStream({\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/the file will be stored with the name\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0filename: \"example.png\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/9b. create a readstream to read the file\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/from the filestored folder\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/and pipe into the database\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fs.createReadStream(filesrc).pipe(streamwrite);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/9c. Complete the write operation\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0streamwrite.on(\"close\", function (file) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(\"Write written successfully in database\");\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(\"Sorry No Grid FS Object\");\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0});\r\n} else {\r\n\u00a0\u00a0\u00a0\u00a0console.log('Sorry not connected');\r\n}\r\nconsole.log(\"done\");<\/pre>\n<p>Here we are loading the mongoose driver. This is used to connect with the MongoDB database.<\/p>\n<p>For reading, a file in MongoDB use the following code in VScode.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">var mongooseDrv = require(\"mongoose\");\r\nvar schema = mongooseDrv.Schema;\r\nmongooseDrv.connect('mongodb:\/\/localhost\/filesDB', { useMongoClient: true });\r\nvar connection = mongooseDrv.connection;\r\nif (connection !== \"undefined\") {\r\n\u00a0\u00a0\u00a0\u00a0console.log(connection.readyState.toString());\r\n\u00a0\u00a0\u00a0\u00a0var path = require(\"path\");\r\n\u00a0\u00a0\u00a0\u00a0var grid = require(\"gridfs-stream\");\r\n\u00a0\u00a0\u00a0\u00a0var fs = require(\"fs\");\r\n\u00a0\u00a0\u00a0\u00a0var videosrc = path.join(__dirname, \".\/filestowrite\/celibration.mp4\");\r\n\u00a0\u00a0\u00a0\u00a0Grid.mongo = mongooseDrv.mongo;\r\n\u00a0\u00a0\u00a0\u00a0connection.once(\"open\", () =&gt; {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(\"Connection Open\");\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var gridfs = grid(example.db);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (gridfs) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var fsstreamwrite = fs.createWriteStream(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0path.join(__dirname, \".\/filestowrite\/example.png\")\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var readstream = gridfs.createReadStream({\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0filename: \"example.png\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0readstream.pipe(fsstreamwrite);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0readstream.on(\"close\", function (file) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(\"File Read successfully from database\");\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(\"Sorry No Grid FS Object\");\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0\u00a0\u00a0\u00a0});\r\n} else {\r\n\u00a0\u00a0\u00a0\u00a0console.log('Sorry not connected');\r\n}\r\nconsole.log(\"done\");<\/pre>\n<h2>MongoDB GridFS Limitations<\/h2>\n<p>There are some limitations of MongoDB GridFS and they are as follows:<\/p>\n<ol>\n<li>Working Set<\/li>\n<li>Performance<\/li>\n<li>Atomic Upcate<\/li>\n<\/ol>\n<h4>i. Working Set<\/h4>\n<p>The database content for serving files can significantly churn your memory working set. If you do not want to disturb the working set, you must use another MongoDB server to serve your files.<\/p>\n<h4>ii. Performance<\/h4>\n<p>The performance of file serving will be slow when you are using a web server and filesystem. But the management benefits might be the reason for the slowdown.<\/p>\n<h4>iii. Atomic Update<\/h4>\n<p>GridFS does not provide an atomic update of a file. If this is necessary, then you will have to maintain multiple versions of your files and then pick the right version of the same.<\/p>\n<h2>Summary<\/h2>\n<p>Hence, we have studied all about GridFS in\u00a0MongoDB\u00a0 with its modules, sharding, indexes with examples. In addition, we studied sub-types of indexes, sharding, and modules: file and chunks with their examples.<\/p>\n<p>Hope, you are enjoying!<\/p>\n<p>Still, have a query? Feel free to ask in the comment section.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The last session was Rockmongo in MongoDB. Here, we will study\u00a0GridFS\u00a0 in\u00a0MongoDB. In this\u00a0GridFS Tutorial, we will study what is MongoDB\u00a0GridFS and its modules, indexes and sharding with examples. Moreover, we will learn the&#46;&#46;&#46;<\/p>\n","protected":false},"author":6,"featured_media":48976,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38],"tags":[18792,18791,18794,18793,18786,18795,18790,18788,18787,18789,18785],"class_list":["post-48937","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mongodb","tag-chunks-collection","tag-chunks-index","tag-file-connection","tag-file-index","tag-gridfs-in-mongodb","tag-gridfs-limitations","tag-gridfs-modules","tag-gridfs-sharding","tag-mongodb-gridfs-modules","tag-mongodb-gridfs-sharding","tag-mongodb-gridfs-tutorial"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>MongoDB GridFS with Example, Modules, Indexes and Sharding - DataFlair<\/title>\n<meta name=\"description\" content=\"MongoDB GridFS Tutorial - Here, we will learn What is GridFS in MongoDB with example, modules, Indexes, Sharding: chunks, file collection and indexes\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MongoDB GridFS with Example, Modules, Indexes and Sharding - DataFlair\" \/>\n<meta property=\"og:description\" content=\"MongoDB GridFS Tutorial - Here, we will learn What is GridFS in MongoDB with example, modules, Indexes, Sharding: chunks, file collection and indexes\" \/>\n<meta property=\"og:url\" content=\"https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/\" \/>\n<meta property=\"og:site_name\" content=\"DataFlair\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DataFlairWS\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-02-11T08:44:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-09T07:37:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2019\/02\/MongoDB-GridFS-01.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"DataFlair Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:site\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DataFlair Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"MongoDB GridFS with Example, Modules, Indexes and Sharding - DataFlair","description":"MongoDB GridFS Tutorial - Here, we will learn What is GridFS in MongoDB with example, modules, Indexes, Sharding: chunks, file collection and indexes","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/","og_locale":"en_US","og_type":"article","og_title":"MongoDB GridFS with Example, Modules, Indexes and Sharding - DataFlair","og_description":"MongoDB GridFS Tutorial - Here, we will learn What is GridFS in MongoDB with example, modules, Indexes, Sharding: chunks, file collection and indexes","og_url":"https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/","og_site_name":"DataFlair","article_publisher":"https:\/\/www.facebook.com\/DataFlairWS\/","article_published_time":"2019-02-11T08:44:45+00:00","article_modified_time":"2021-05-09T07:37:16+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2019\/02\/MongoDB-GridFS-01.jpg","type":"image\/jpeg"}],"author":"DataFlair Team","twitter_card":"summary_large_image","twitter_creator":"@DataFlairWS","twitter_site":"@DataFlairWS","twitter_misc":{"Written by":"DataFlair Team","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/#article","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/"},"author":{"name":"DataFlair Team","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/2c58ecb4f73a39f0ef993f1ddfcd7b89"},"headline":"MongoDB GridFS with Example, Modules, Indexes and Sharding","datePublished":"2019-02-11T08:44:45+00:00","dateModified":"2021-05-09T07:37:16+00:00","mainEntityOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/"},"wordCount":939,"commentCount":0,"publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2019\/02\/MongoDB-GridFS-01.jpg","keywords":["chunks collection","chunks index","file connection","file index","GridFS in MongoDB","GridFS Limitations","GridFS Modules","GridFS Sharding","MongoDB GridFS Modules","MongoDB GridFS Sharding","MongoDB GridFS tutorial"],"articleSection":["MongoDB Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/","url":"https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/","name":"MongoDB GridFS with Example, Modules, Indexes and Sharding - DataFlair","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/#primaryimage"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2019\/02\/MongoDB-GridFS-01.jpg","datePublished":"2019-02-11T08:44:45+00:00","dateModified":"2021-05-09T07:37:16+00:00","description":"MongoDB GridFS Tutorial - Here, we will learn What is GridFS in MongoDB with example, modules, Indexes, Sharding: chunks, file collection and indexes","breadcrumb":{"@id":"https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/#primaryimage","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2019\/02\/MongoDB-GridFS-01.jpg","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2019\/02\/MongoDB-GridFS-01.jpg","width":1200,"height":628,"caption":"MongoDB GridFS with Example, Modules, Indexes and Sharding"},{"@type":"BreadcrumbList","@id":"https:\/\/data-flair.training\/blogs\/mongodb-gridfs-tutorial\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog Home","item":"https:\/\/data-flair.training\/blogs\/"},{"@type":"ListItem","position":2,"name":"MongoDB Tutorials","item":"https:\/\/data-flair.training\/blogs\/category\/mongodb\/"},{"@type":"ListItem","position":3,"name":"MongoDB GridFS with Example, Modules, Indexes and Sharding"}]},{"@type":"WebSite","@id":"https:\/\/data-flair.training\/blogs\/#website","url":"https:\/\/data-flair.training\/blogs\/","name":"DataFlair","description":"Learn Today. Lead Tomorrow.","publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/data-flair.training\/blogs\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/data-flair.training\/blogs\/#organization","name":"DataFlair","url":"https:\/\/data-flair.training\/blogs\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","width":106,"height":48,"caption":"DataFlair"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DataFlairWS\/","https:\/\/x.com\/DataFlairWS","https:\/\/www.linkedin.com\/company\/dataflair-web-services-pvt-ltd\/","https:\/\/www.youtube.com\/user\/DataFlairWS"]},{"@type":"Person","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/2c58ecb4f73a39f0ef993f1ddfcd7b89","name":"DataFlair Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/1ce4a0e3e542444fc73bbebf83e89e8b73e2d95ccb1fcee64da9945f078b97c5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1ce4a0e3e542444fc73bbebf83e89e8b73e2d95ccb1fcee64da9945f078b97c5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1ce4a0e3e542444fc73bbebf83e89e8b73e2d95ccb1fcee64da9945f078b97c5?s=96&d=mm&r=g","caption":"DataFlair Team"},"description":"The DataFlair Team provides industry-driven content on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. Our expert educators focus on delivering value-packed, easy-to-follow resources for tech enthusiasts and professionals.","url":"https:\/\/data-flair.training\/blogs\/author\/dfteam2\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/48937","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/comments?post=48937"}],"version-history":[{"count":6,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/48937\/revisions"}],"predecessor-version":[{"id":93176,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/48937\/revisions\/93176"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media\/48976"}],"wp:attachment":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media?parent=48937"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/categories?post=48937"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/tags?post=48937"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}