2016-03-05 45 views
0

我需要索引可能存儲字符串/數字(int或float)或數組的字段。Mongodb多類型字段

我已經使用({field:1})對它進行了索引,但其中一些內容很大,我得到的「key too large to index」錯誤。

如果我使用文本索引來索引它,該如何解決我的問題呢?它會索引數字嗎?

有沒有辦法爲支持大內容的單個字段(數字和字符串)創建多個索引?

謝謝。

回答

0

在MongoDB中,該Index Key Limit小於1024個字節,您可以更改索引來text indexhashed index

但是在一個或多個字段,其值的文本索引是陣列字符串元素,所以在你的情況下,最好是使用散列索引

db.collection.createIndex({ field: "hashed" }) 

順便說一句,也許有另一種方式啓動mongodb如下failIndexKeyTooLong as false禁用索引鍵限制。

sudo mongod --setParameter failIndexKeyTooLong=false 
+0

問題是我有很多正則表達式查詢。散列索引可以正確處理它嗎? – user2288183

+0

@ user2288183,IMO,根據doc的這些信息,'如果字段存在索引,則MongoDB將正則表達式與索引中的值匹配,這可能比集合掃描更快。如果正則表達式是「前綴表達式」,則可能會發生進一步優化,這意味着所有可能的匹配都以相同的字符串開頭。這允許MongoDB從該前綴構造一個「範圍」,並且只與該範圍內的那些索引值相匹配。散列索引可以很好地處理它。 – zangw

+0

@ user2288183,也許你可以通過比較來比較它們。 – zangw