Подтвердить что ты не робот

MongoDB, выполнение запроса по регулярному выражению по индексированным полям

Я хочу найти учетную запись по имени (в коллекции MongoDB из 50 тыс. Учетных записей)

Обычным способом: мы находим строку

db.accounts.find({ name: 'Jon Skeet' })  // indexes help improve performance!

Как насчет регулярного выражения? Это дорогостоящая операция?

db.accounts.find( { name: /Jon Skeet/ }) // worry! how indexes work with regex?

Редактировать:

Согласно WiredPrairie:
MongoDB использует префикс RegEx для индексов поиска (например: /^prefix.*/):

db.accounts.find( { name: /^Jon Skeet/ })  // indexes will help!'

MongoDB $ regex

4b9b3361

Ответ 1

Собственно в соответствии с документацией,

Если для поля существует индекс, то MongoDB соответствует регулярному выражение против значений в индексе, которое может быть быстрее, чем сбор сканирование. Дальнейшая оптимизация может произойти, если выражение является "префиксным выражением", что означает, что все потенциальные совпадения начинаются с одной и той же строки. Это позволяет MongoDB построить "диапазон" из этого префикса и соответствует только этим значениям из индекс, который попадает в этот диапазон.

http://docs.mongodb.org/manual/reference/operator/query/regex/#index-use

Другими словами:

Для/Jon Skeet/regex, mongo будет полностью проверять ключи в индексе, а затем будет получать согласованные документы, которые могут быть быстрее, чем сканирование коллекции.

Для/^ Jon Skeet/regex, mongo будет проверять только диапазон, начинающийся с регулярного выражения в индексе, который будет быстрее.