Обновление : для MongoDB 2.4 и выше вы не должны использовать этот метод, вместо этого используйте текстовый индекс MongoDB .
Ниже приведен оригинальный и все еще актуальный ответ для MongoDB <2.4. </p>
Отличный вопрос. Имейте это в виду:
- MongoDB может использовать только один индекс для запроса.
- Запросы, использующие регулярные выражения, используют индекс только тогда, когда регулярное выражение укоренено и чувствительно к регистру.
Лучший способ выполнить поиск по нескольким полям - создать массив поисковых терминов (в нижнем регистре) для каждого документа и проиндексировать это поле. Для этого используется мультиключевая функция MongoDB.
Так что документ может выглядеть так:
{
"firstname": "Tyler",
"surname": "Brock",
"companyname": "Awesome, Inc.",
"search_terms": [ "tyler", "brock", "awesome inc"]
}
Вы бы создали индекс: db.users.ensureIndex({ "search_terms": 1 })
Затем, когда кто-то ищет «Тайлер», вы разбиваете регистр и ищете коллекцию, используя регулярное выражение с учетом регистра, соответствующее началу строки:
db.users.find({ "search_terms": /^tyler/ })
Что делает mongodb при выполнении этого запроса, так это пытается сопоставить ваш термин с каждым элементом массива (индекс также настраивается таким образом - так что это быстро). Надеюсь, это приведет вас туда, куда вам нужно, удачи.
Примечание: эти примеры находятся в оболочке. Я никогда не писал ни одной строки на C #, но понятия будут переводиться, даже если синтаксис может отличаться.