ensureIndex
создаст коллекцию, если она еще не существует.Неважно, если вы добавляете документы, у которых нет свойства, охватываемого индексом, вы просто не можете использовать этот индекс для поиска этих документов.Насколько я понимаю, в версиях до 1.7.4 документ, в котором отсутствует свойство, для которого существует индекс, будет проиндексирован так, как если бы он имел это свойство, но будет иметь нулевое значение.В версиях после 1.7.4 вы можете создавать разреженные индексы, которые вообще не включают эти объекты.Разница незначительна, но может быть существенной в некоторых ситуациях.
В зависимости от обстоятельств может не быть хорошей идеей создавать индексы при запуске приложения.Рассмотрим ситуацию, когда вы развертываете новую версию, которая добавляет новые индексы при запуске, в процессе разработки вы не заметите этого, поскольку у вас есть только небольшая база данных, но в производственной среде вы можете иметь огромную базу данных, и добавление индекса займет многовремени.Во время создания индекса ваше приложение будет зависать, и вы не сможете обслуживать запросы.Вы можете создавать индексы с фоновым флагом, установленным в true (синтаксис зависит от того, какой драйвер вы используете), но в большинстве случаев лучше добавлять индексы вручную или как часть сценария установки.Таким образом, вам придется подумать, прежде чем обновлять индексы.