Порядок составной индексации должен соответствовать правилу equality --> sort --> range
.Хорошее описание этого можно найти в этом ответе.
Это означает, что первое поле в индексе будет source
, за которым следуют фильтры диапазона (expiration_date
, low_performer
и high_performer
).
Как вы заметили, одно из полей «исполнителя» не может быть включено в индекс, поскольку может быть проиндексирован только один массив.Вы должны использовать свои знания набора данных, чтобы определить, какой фильтр (low_performer
или high_performer
) будет более избирательным, и выбрать этот фильтр для включения в индекс.
Если предположить, что high_performer
является более избирательным, единственным оставшимся шагом будет определение порядка между expiration_date
и high_performer
.Опять же, вы должны использовать свои знания набора данных, чтобы сделать это определение на основе селективности.
Если предположить, что expiration_date
является более избирательным, индекс для создания будет:
{ "source" : 1, "expiration_date" : 1, "high_performer" : 1 }