2012-10-17 36 views
0

我有一個數組中嵌入文檔的文檔。 prupose是允許別名登錄,即:一個用戶需要能夠擁有多個登錄名(username + company_id + pwd),因爲他或她可能屬於不同的公司。MongoDB在嵌入式數組上使用索引嗎?

它看起來somethine這樣的:

{ 
    name : "James D" 
    logins : [ 
     {company_id : 1, username : "james", pwd : "****"}, 
     {company_id : 2, username : "james.d", pwd : "****"}, 
     {company_id : 3, username : "jd", pwd : "****"} 
    ] 
} 

我想指數company_idusername,我沒有使用

> db.user.ensureIndex({"logins.username" : "james", "logins.company_id" : 1}) 

這裏是我的問題,做索引工作?該查詢是否使用索引進行了非常實用的操作?我問的是因爲(1)我不確定MongoDB是否處理這種索引,以及(2)我不知道如何解釋explain()函數。

> db.user.find({"logins.username" : "james", "logins.company_id" : 1}).explain() 
{ 
     "cursor" : "BtreeCursor username.color_1_logins.company_id_1", 
     "nscanned" : 3, 
     "nscannedObjects" : 3, 
     "n" : 2, 
     "millis" : 1, 
     "nYields" : 0, 
     "nChunkSkips" : 0, 
     "isMultiKey" : true, 
     "indexOnly" : false, 
     "indexBounds" : { 
       "logins.username" : [ 
         [ 
           "blue", 
           "blue" 
         ] 
       ], 
       "logins.company_id" : [ 
         [ 
           { 
             "$minElement" : 1 
           }, 
           { 
             "$maxElement" : 1 
           } 
         ] 
       ] 
     } 
} 

回答

1

這些索引是允許的,你的似乎是工作。每個數組元素都被單獨添加到索引中,因此在大型數組上索引可能會快速增加索引的大小。對於一些不應該成爲問題的用戶名的別名。

+0

感謝您的解釋 - 這正是我一直在尋找的! – luttkens