Du har inget index som mongo automatiskt kommer att använda för det, så det gör en fullständig tabellskanning.
Som nämnts i dokumenten
Varför
Om du har ett index på a,b - och du söker på a
ensam - ett index kommer automatiskt att användas. Detta beror på att det är början av indexet (vilket är snabbt att göra), db kan bara ignorera resten av indexvärdet.
Ett index på a,b är ineffektivt när du söker med b
ensam helt enkelt för att det inte ger möjlighet att använda indexsökningen med "starts with thisfixedstring".
Så antingen:
- Inkludera _reference_1_id i frågan (förmodligen irrelevant)
- ELLER lägg till ett index på _reference_2_id (om du ofta frågar efter fältet)
- ELLER använd en ledtråd
Tips
Förmodligen ditt billigaste alternativ just nu.
Lägg till en frågetips för att tvinga fram din _reference_1_id_1__reference_2_id_1_id_1
index. Vilket sannolikt är mycket snabbare än en fullständig tabellsökning, men fortfarande mycket långsammare än ett index som börjar med fältet du använder i frågan.
dvs
db.mycoll
.find({"_reference_2_id" : ObjectId("jkl7890123456")})
.hint("_reference_1_id_1__reference_2_id_1_id_1");