2014-01-21 75 views
3

我想用GridFS創建一個虛擬文件系統。在fs.files集合中存儲文件夾

其實,我想從文件夾對象的GridFS擴展fs.files集合。

文件夾模式會是這樣的:

var folder = { 
    _id: new ObjectID(), 
    name: "Folder1", 
    metadata: { 
     type: "Folder", 
     parentId: ObjectID("xxxxxxxxx") 
    } 
}; 

,並獲得由parentId的所有文件和文件夾,這將是一個對象ID和存儲在同一個集合中:

function getFilesAndFolders(parentId) { 
    var items = db.fs.files.find({ "metadata.parentId": parentId }); 

    items.forEach(function (item) { 
     switch (item.metadata.type) { 
      case "Folder": 
       // Do something with the folder 
       break; 
      case "File": 
       // Do something with the file 
       break; 
      default: break; 
     } 
    }); 

    return items; 
} 

會使用不同的對象來擴展db.fs.files集合的一個好習慣,還是創建單獨的集合(例如db.fs.folders)更好,但在fs.files和fs.folders上有兩個查詢來獲取所有項目?

回答

3

有使用標準GridFS的實現一些方法,可能會爲你的虛擬文件夾的概念有所幫助:

  1. 你可以節省你的「虛擬文件夾」路徑的價值在GridFS files元。假設你想實現一個嵌套的文件夾層次結構,讀取包含通用模式的MongoDB數據模型文檔(Model Tree Structures)會很有用。

  2. GridFS有一個「桶」或命名空間的概念。默認名稱空間是fs,但是如果相對平坦,則可以爲每個「虛擬文件夾」或內容類型使用不同的名稱空間。