MongoDB - GridFS



GridFS 是 MongoDB 用於儲存和檢索大型檔案的規範,例如影像、音訊檔案、影片檔案等。它是一種用於儲存檔案的類似檔案系統的機制,但其資料儲存在 MongoDB 集合中。GridFS 能夠儲存的檔案大小甚至超過其 16MB 的文件大小限制。

GridFS 將檔案分成塊,並將每個資料塊儲存在單獨的文件中,每個文件的最大大小為 255k。

GridFS 預設使用兩個集合fs.filesfs.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

現在,我們將使用 GridFS 使用put 命令儲存一個 mp3 檔案。為此,我們將使用 MongoDB 安裝資料夾的 bin 資料夾中提供的mongofiles.exe 實用程式。

開啟命令提示符,導航到 MongoDB 安裝資料夾的 bin 資料夾中的 mongofiles.exe,然後鍵入以下程式碼:

>mongofiles.exe -d gridfs put song.mp3

這裡,gridfs 是將檔案儲存到的資料庫的名稱。如果資料庫不存在,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.chunks 集合中存在的所有塊,使用上一個查詢中返回的文件 ID:

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

在我的例子中,查詢返回了 40 個文件,這意味著整個 mp3 文件被分成 40 個數據塊。

廣告