MongoDB GridFS

GridFS は、16M(BSONファイル制限)を超えるファイル(画像、音声、動画など)を保存および復元するために使用されます。

GridFS もファイルストレージの一つの方法ですが、それはMonoDBのコレクションに格納されます。

GridFS は16Mより大きいファイルをより良く保存できます。

GridFS は大きなファイルオブジェクトを複数の小さなchunk(ファイル断片)に分割します。通常は256k/個で、各chunkはMongoDBのドキュメントとしてchunksコレクションに格納されます。

GridFS は1つのファイルを保存するために2つのコレクションを使用します:fs.files と fs.chunks。

各ファイルの実際の内容はchunks(バイナリデータ)に保存され、ファイルに関するメタデータ(filename、content_type、その他ユーザー定義の属性)はfilesコレクションに保存されます。

以下は、簡単な fs.files コレクションドキュメントです:

{
   "filename": "test.txt",
   "chunkSize": NumberInt(261120),
   "uploadDate": ISODate("2014-04-13T11:32:33.557Z"),
   "md5": "7b762939321e146569b07f72c62cca4f",
   "length": NumberInt(646)
}

以下は、簡単な fs.chunks コレクションドキュメントです:

{
   "files_id": ObjectId("534a75d19f54bfec8a2fe44b"),
   "n": NumberInt(0),
   "data": "Mongo Binary Data"
}

GridFS ファイルを追加

ここで、GridFS の put コマンドを使用して mp3 ファイルを保存します。MongoDB インストールディレクトリの bin にある mongofiles.exe ツールを呼び出します。

コマンドプロンプトを開き、MongoDBのインストールディレクトリのbinディレクトリに移動して、mongofiles.exeを見つけ、以下のコードを入力します:

>mongofiles.exe -d gridfs put song.mp3

-d gridfsファイルを保存するデータベース名を指定します。そのデータベースが存在しない場合、MongoDBは自動的に作成します。そのデータベースが存在しない場合、MongoDBは自動的に作成します。Song.mp3 はオーディオファイル名です。

以下のコマンドを使用して、データベース内のファイルのドキュメントを確認します:

>db.fs.files.find()

上記のコマンドを実行すると、以下のドキュメントデータが返されます:

{
   _id: ObjectId('534a811bf8b4aa4d33fdf94d'), 
   filename: "song.mp3", 
   chunkSize: 261120, 
   uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
   length: 10401959 
}

fs.chunks コレクション内のすべてのチャンクを確認できます。以下で、ファイルの _id 値を取得しました。この _id に基づいてチャンク(chunk)のデータを取得できます:

>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})

上記の例では、クエリが40個のドキュメントのデータを返しました。これは、mp3ファイルが40個のチャンクに格納されていることを意味します。

その他の拡張