Давайте посмотрим на лес сначала, прежде чем смотреть на деревья.
Здесь есть много информативных ответов с большими подробностями, я не буду повторять ни одного из них. Ключ к программированию в JavaScript имеет сначала правильную ментальную модель общего исполнения.
Хорошие новости заключается в том, что, если вы хорошо понимаете этот момент, вам никогда не придется беспокоиться о гоночных условиях. Прежде всего вы должны понимать, как вы хотите упорядочить свой код как по существу ответ на разные дискретные события, и как вы хотите объединить их в логическую последовательность. Вы можете использовать обещания или новые асинхронные / ожидающие более высокие уровни в качестве инструментов для этой цели, или вы можете откатывать свои собственные.
Но вы не должны использовать какие-либо тактические инструменты для решения проблемы, пока вам не понравится актуальная проблемная область. Нарисуйте карту этих зависимостей, чтобы знать, что нужно запускать, когда. Попытка ad-hoc подхода ко всем этим обратным вызовам просто не поможет вам.
Если вы хотите индексировать одно поле и искать его, то он работает по умолчанию. Допустим, вы хотите индексировать поле companyName
. Когда вы выполняете поиск $text
в этой коллекции, будут использоваться только данные из поля companyName
, потому что вы включили это поле в свой индекс.
Теперь второй сценарий, ваш индекс $text
содержит более одного поля. В этом случае вы не можете ограничить поиск только поиском значений, индексированных из определенного поля. Индекс $text
построен на уровне сбора, и коллекция может иметь не более одного индекса $text
. В этом случае вы можете ограничить поиск по определенному полю в случае использования regex
.
MongoDB обладает гибкостью для выполнения требований других сценариев, но вы также можете оценить использование других технологий, если ваше приложение сильно ориентировано на поиск, и вы, в первую очередь, после полнотекстовой поисковой системы для поиска документов по ключевым словам с сильным синтаксисом запросов. ElasticSearch может быть альтернативой здесь. Это действительно зависит от типа приложения и ваших потребностей.