2016-03-05 7 views
0

Мне нужно индексировать поле, которое может хранить строки/числа (int или float) или массивы.Mongodb multi type field

Я проиндексировал его, используя ({поле: 1}), но часть содержимого большая, и я получаю ошибку «ключ слишком большой для индексации».

Что делать, если я проиндексирую его с помощью текстового индекса, должен ли он решить мою проблему? Будет ли он также индексировать номера?

Есть ли способ создать несколько индексов для одного поля (числа и строки), которые поддерживают большой контент?

Спасибо.

ответ

0

В Mongodb, Index Key Limit составляет менее 1024 байт, вы можете изменить свой индекс на text index или hashed index.

Однако текст индекс на поле или поля, значение которого является строка или массив строковых элементов, так что в вашем случае, это лучше использовать HASHED индексировать

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