GridFS は画像、音声ファイル、動画ファイルなど大きなファイルを保存、検索する MongoDB 仕様です。 ファイルを保存するファイルシステムのようなものですが、データは MongoDB のコレクション内に保存されます。
GridFS はファイルをチャンクに分割し、データの各チャンクを個別のドキュメントに格納します(各チャンクの最大サイズは 255k)。 各チャンクは一意の _id ObjectId フィールドによって識別されます。 fs.files は親ドキュメントとして機能します。 fs.chunks ドキュメントの files_id フィールドは、チャンクをその親にリンクします。
Following is a sample document of fs.files collection –
{ "filename": "test.txt", "chunkSize": NumberInt(261120), "uploadDate": ISODate("2014-04-13T11:32:33.557Z"), "md5": "7b762939321e146569b07f72c62cca4f", "length": NumberInt(646)}
このドキュメントには、ファイル名、チャンクサイズ、アップロード日、および長さが特定されます。
Following is a sample document of fs.chunks document –
{ "files_id": ObjectId("534a75d19f54bfec8a2fe44b"), "n": NumberInt(0), "data": "Mongo Binary Data"}
GridFSへのファイル追加
さて、GridFSを使ってputコマンドでMP3ファイルを保存します。
コマンドプロンプトを開き、MongoDBインストールフォルダーのbinフォルダーにあるmongofiles.exeに移動し、次のコードを入力します。 データベースが存在しない場合、MongoDB は自動的にその場で新しいドキュメントを作成します。 Song.mp3 はアップロードされたファイルの名前です。 データベース内のファイルのドキュメントを見るには find クエリ –
>db.fs.files.find()
上記のコマンドは次のドキュメントを返しました –
{ _id: ObjectId('534a811bf8b4aa4d33fdf94d'), filename: "song.mp3", chunkSize: 261120, uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41", length: 10401959 }
また、fs.DB に存在するすべてのチャンクを見ることができます –
{ _id: ObjectId('534a811bf8b4aa4d33fdf94d'), filename: "song.mp3", chunkSize: 261120, uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41", length: 10401959 }
また、fs.DB に存在するすべてのチャンクを見ることができます。
>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})
私の場合、クエリは 40 個のドキュメントを返しました。これは、全体の mp3 ドキュメントが 40 個のデータのチャンクに分割されていることを意味します。