2013-11-24 190 views
0

我想用mongodb創建一個簡單的文件系統實現。MongoDB數組索引

考慮架構,

FSSchema = new mongoose.Schema({ 
    fname : String, 
    path : [String], 
    content : Schema.Types.Mixed, 
    user : { 
     type : Schema.ObjectId, 
     ref : 'User' 
    } 
})  
// Create compount index 
FSSchema.index({ path : 1 , fname : 1 } , { unique : true }) 
mongoose.model('Data', DataSchema) 

但是我的單元測試創​​建了兩個不同的條目

user1 = new Data({ fname : 'name'}, path: ['fld1','fld2']}) 
user1 = new Data({ fname : 'name'}, path: ['fld1','fld3']}) 

分別應該是指 'FLD1/FLD2 /名稱' 和「FLD1/fld3 /時失敗名稱'。失敗是因爲顯然只有'name'和'fld1'在索引中被使用。

我該如何去創建這樣一個複合索引?

注意:我知道顯而易見的解決方案是將路徑作爲帶有文件分隔符(如'/')的單個字符串。只是想知道是否可以在索引中使用字符串數組。

+0

你可以添加你的查詢嗎? – idbentley

+0

我實際上在模式中有更多的字段,即用戶字段(我將編輯問題以反映這一點)。我想獲取特定用戶的所有數據對象,然後使用該路徑在客戶端構建一棵樹。所以我的查詢就像Data.find({user:user._id}) – Joe

+1

它看起來像你不能在數據庫中。看看這個問題的答案:http://stackoverflow.com/questions/4435637。 – idbentley

回答

2

您需要將路徑合併爲一個值。這是MongoDb的一個有意識的特性,即任何數組的每個元素都被索引,因此當您嘗試插入相同的兩個值時會看到重複的錯誤。如果將路徑作爲不同目錄很重要,那麼您可能需要將數據加倍存儲,一次作爲唯一性的完整路徑,另一次作爲唯一性存儲。不要像剛纔那樣在數組上強制實現唯一性。

+0

謝謝,無法找到任何確認每個元素的唯一數組索引。 – AJcodez