Nemáte žádný index, který by k tomu mongo automaticky použilo, takže provádí úplné skenování tabulky.
Jak je uvedeno v dokumentech
Proč
Pokud máte index na a,b - a hledáte podle a
samostatně - automaticky se použije index. Je to proto, že je to začátek indexu (což je rychlé), db může zbytek hodnoty indexu prostě ignorovat.
Index na a,b je neefektivní při vyhledávání podle b
samotný jednoduše proto, že nedává možnost použít indexové vyhledávání s "začíná tímto pevným řetězcem".
Takže buď:
- Zahrňte do dotazu _reference_1_id (pravděpodobně irelevantní)
- NEBO přidejte index na _reference_2_id (pokud se dotazujete pomocí pole často)
- NEBO použijte nápovědu
Nápověda
Pravděpodobně vaše nejlevnější možnost právě teď.
Přidejte nápovědu k dotazu, kterou chcete vynutit pomocí _reference_1_id_1__reference_2_id_1_id_1
index. Což bude pravděpodobně mnohem rychlejší než úplné prohledávání tabulky, ale stále mnohem pomalejší než index, který začíná polem, které používáte v dotazu.
tj.
db.mycoll
.find({"_reference_2_id" : ObjectId("jkl7890123456")})
.hint("_reference_1_id_1__reference_2_id_1_id_1");