Нямате индекс, който mongo автоматично да използва за това, така че извършва пълно сканиране на таблица.
Както е споменато в документите
Защо
Ако имате индекс на a,b - и търсите по a
самостоятелно - автоматично ще се използва индекс. Това е така, защото това е началото на индекса (което се прави бързо), db може просто да игнорира останалата част от стойността на индекса.
Индекс на a, b е неефективен при търсене по b
сам, просто защото не дава възможност за използване на търсене в индекса с "започва с този фиксиран низ".
И така, едно от двете:
- Включете _reference_1_id в заявката (вероятно неуместно)
- ИЛИ добавете индекс към _reference_2_id (ако често правите заявки по полето)
- ИЛИ използвайте подсказка
Съвет
Вероятно най-евтината ви опция в момента.
Добавете подсказка за заявка, за да използвате вашия _reference_1_id_1__reference_2_id_1_id_1
индекс. Което вероятно ще бъде много по-бързо от пълно сканиране на таблица, но все пак много по-бавно от индекс, който започва с полето, което използвате в заявката.
т.е.
db.mycoll
.find({"_reference_2_id" : ObjectId("jkl7890123456")})
.hint("_reference_1_id_1__reference_2_id_1_id_1");