MongoDB 教學課程login
MongoDB 教學課程
作者:php.cn  更新時間:2022-04-21 17:49:03

MongoDB GridFS


GridFS 用於儲存和恢復那些超過16M(BSON檔案限制)的檔案(如:圖片、音訊、視訊等)。

GridFS 也是檔案儲存的一種方式,但是它是儲存在MonoDB的集合中。

GridFS 可以更好的儲存大於16M的檔案。

GridFS 會將大檔案物件分割成多個小的chunk(檔案片段),一般為256k/個,每個chunk將作為MongoDB的一個文檔(document)被儲存在chunks集合中。


GridFS 用兩個集合來儲存一個檔案:fs.files與fs.chunks。

每個檔案的實際內容被存在chunks(二進位資料)中,和檔案有關的meta資料(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

GridFS  是儲存檔案的資料名稱。如果不存在該資料庫,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個區塊中。

#

PHP中文網