2016-09-23 8 views
0

Я новичок, пытаясь индексировать коллекции содержимого. Мой запрос выглядитMongodb Поле индексации массива в документах

db.contents.find({title:{$regex: /arnab/i}, tags:{$regex: /Times/i}}) 

ниже мой индекс запрос

db.contents.createIndex({title: 1, tags:1}) 

теги являются любым массивом. Будет ли этот запрос работать. Есть ли лучший способ индексировать заголовок и теги массива.

Заранее спасибо

ответ

0

полей массива могут быть индексированы как обычные полей. При индексировании MongoDB автоматически создает мультииндексы для полей массивов.

db.contents.find({title:{$regex: /arnab/i}, tags:{$regex: /Times/i}})case insensitivecontains поиск с использованием регулярных выражений.

Из официальных документов:

Для случая нечувствительных регулярных выражений запросов, эти запросы обычно не может эффективно использовать индексы.

Таким образом, созданный вами индекс не может быть использован с этим запросом.

Поисковые запросы, основанные на регулярном выражении, лучше всего используют индексы, если поиск чувствителен к регистру. Например. db.contents.find({title:{$regex: /arnab/}, tags:{$regex: /Times/}}).

И даже лучше, если поиск starts with (Prefix Regex) вместо contains. Например. db.contents.find({title:{$regex: /^arnab/}, tags:{$regex: /^Times/}}).

Смежные вопросы