Du har ikke noget indeks, som mongo automatisk vil bruge til det, så den laver en fuld tabelscanning.
Som nævnt i dokumenterne
Hvorfor
Hvis du har et indeks på a,b - og du søger på a
alene - et indeks vil automatisk blive brugt. Dette er fordi det er starten på indekset (hvilket er hurtigt at gøre), db kan bare ignorere resten af indeksværdien.
Et indeks på a,b er ineffektivt når du søger efter b
alene, simpelthen fordi det ikke giver mulighed for at bruge indekssøgningen med "starter med denne faste streng".
Så enten:
- Inkluder _reference_1_id i forespørgslen (sandsynligvis irrelevant)
- ELLER tilføj et indeks på _reference_2_id (hvis du ofte spørger efter feltet)
- ELLER brug et tip
Tip
Sandsynligvis din billigste løsning lige nu.
Tilføj et forespørgselstip for at tvinge din _reference_1_id_1__reference_2_id_1_id_1
indeks. Hvilket sandsynligvis vil være meget hurtigere end en fuld tabelscanning, men stadig meget langsommere end et indeks, der starter med det felt, du bruger i forespørgslen.
dvs.
db.mycoll
.find({"_reference_2_id" : ObjectId("jkl7890123456")})
.hint("_reference_1_id_1__reference_2_id_1_id_1");