Mongodb-gridfs
MongoDB-GridFS
*GridFS* は、画像、オーディオファイル、ビデオファイルなどの大きなファイルを格納および取得するためのMongoDB仕様です。 ファイルを保存するのは一種のファイルシステムですが、そのデータはMongoDBコレクション内に保存されます。 GridFSには、ドキュメントサイズの上限である16MBを超えるファイルを保存する機能があります。
GridFSはファイルをチャンクに分割し、各データのチャンクをそれぞれ最大サイズ255kの個別のドキュメントに保存します。
GridFSは、デフォルトで2つのコレクション fs.files および fs.chunks を使用して、ファイルのメタデータとチャンクを保存します。 各チャンクは、一意の_id ObjectIdフィールドによって識別されます。 fs.filesは親ドキュメントとして機能します。 fs.chunksドキュメントの files_id フィールドは、チャンクをその親にリンクします。
以下は、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へのファイルの追加
次に、 put コマンドを使用して、GridFSを使用してmp3ファイルを保存します。 これには、MongoDBインストールフォルダーのbinフォルダーにある mongofiles.exe ユーティリティを使用します。
コマンドプロンプトを開き、MongoDBインストールフォルダのbinフォルダにあるmongofiles.exeに移動し、次のコードを入力します-
>mongofiles.exe -d gridfs put song.mp3
ここで、 gridfs は、ファイルが保存されるデータベースの名前です。 データベースが存在しない場合、MongoDBはその場で自動的に新しいドキュメントを作成します。 Song.mp3は、アップロードされたファイルの名前です。 データベース内のファイルのドキュメントを表示するには、検索クエリを使用することができます-
>db.fs.files.find()
上記のコマンドは、次のドキュメントを返しました-
{
_id: ObjectId('534a811bf8b4aa4d33fdf94d'),
filename: "song.mp3",
chunkSize: 261120,
uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
length: 10401959
}
また、以前のクエリで返されたドキュメントIDを使用して、次のコードで保存されたファイルに関連するfs.chunksコレクションに存在するすべてのチャンクを見ることができます-
>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})
私の場合、クエリは40個のドキュメントを返しました。つまり、mp3ドキュメント全体が40のデータチャンクに分割されました。