2014-10-03 56 views
0

在我的情況,我需要的URL是一個唯一索引,但某些URL可能會非常大,其超過MongoDB的最大密鑰長度,從而返回錯誤插入,MongoDB中如何與長字符串鍵

WriteResult({ 
    "nInserted" : 0, 
    "writeError" : { 
     "code" : 17280, 
     "errmsg" : "insertDocument :: caused by :: 17280 Btree::insert: key too large to index, failing test.temp.$_id_ 2953 { : \"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii...\" }" 
    } 
}) 

是有任何方式/替代方法/技巧/任何我可以存儲網址作爲唯一索引?

+0

可以URL的哈希存儲爲一個鍵,網址本身的價值。哈希具有固定的長度。碰撞將非常罕見。 – stalk 2014-10-03 07:05:26

回答

2

在莖杆評論上進行擴展,你可以使用抗碰撞哈希函數(sha-256)來存儲你的url的哈希值,這樣你可以保證它具有固定長度並且很可能是唯一的(我記得你可以贏得一些東西,如果你會發現2個不同的鍵映射到相同的值)。

如果你確實需要存儲網址 - 把它們放在一個單獨的(沒有索引的字段)。另一個建議是嘗試使用hashed index,而不是正常指數(不能嘗試它,現在,所以請告訴它如何去)