2012-07-08 168 views
5

我試圖存儲以下鏈接:的MongoDB:稀疏的獨特價值和稀疏複合索引

URL = { 
    hostname: 'i.imgur.com', 
    webid: 'qkELz.jpg' 
} 

我想在這兩個領域獨特而稀疏複合索引,因爲:

  1. hostnamewebid的組合應該是唯一的。
  2. webid將始終使用hostname查詢。
  3. webid不必是全球唯一的。
  4. A URL不需要webid。

然而,當我這樣做,我得到以下錯誤:

MongoError: E11000 duplicate key error index: db.urls.$hostname_1_webid_1 dup key: { : "imgur.com", : null } 

我複合索引的情況下猜測,空計數,而在常規的指標,他們不是。

任何解決此問題的方法?現在我要分別索引hostnamewebid

+1

對於[唯一索引](http://www.mongodb.org/display/DOCS/索引#索引唯一%3Atrue)(化合物或其他)您不能擁有相同的鍵。您應該可以插入單個記錄(hostname,null),但是具有相同主機名的第二個記錄將是重複的。 – Stennie 2012-07-09 04:23:42

回答

4

請記住,mongodb每個查詢只能使用一個索引(它不會將索引連接在一起以在兩個具有更快單獨索引的字段上進行查詢)。這就是說,如果你想嘗試檢查唯一性,你可以在插入之前從應用程序中進行查詢(這隻能部分解決問題,因爲在查詢和插入時存在差距)。

你可能想在這個JIRA問題投票過濾索引,這可能會幫助你的使用情況: https://jira.mongodb.org/browse/SERVER-785

+0

哦。那麼它如何決定使用哪個索引?我在插入之前已經檢查過唯一性。 – 2012-07-08 22:41:25

+0

它基於集合和查詢有幾個不同的查詢計劃:http://www.mongodb.org/display/DOCS/Optimization – ranman 2012-07-08 23:20:06