Non hai alcun indice che mongo utilizzerà automaticamente per quello, quindi sta eseguendo una scansione completa della tabella.
Come menzionato in i documenti
Perché
Se hai un indice su a,b - e cerchi per a
da solo - verrà utilizzato automaticamente un indice. Questo perché è l'inizio dell'indice (che è veloce da fare), il db può semplicemente ignorare il resto del valore dell'indice.
Un indice su a,b è inefficiente durante la ricerca per b
da solo semplicemente perché non dà la possibilità di utilizzare la ricerca dell'indice con "inizia con questa stringa fissa".
Quindi, o:
- Includi _reference_1_id nella query (probabilmente irrilevante)
- OPPURE aggiungi un indice su _reference_2_id (se esegui spesso query per campo)
- OPPURE usa un suggerimento
Suggerimento
Probabilmente la tua opzione più economica in questo momento.
Aggiungi un suggerimento per la query per forzare l'utilizzo del tuo _reference_1_id_1__reference_2_id_1_id_1
indice. Che probabilmente sarà molto più veloce di una scansione completa della tabella, ma comunque molto più lenta di un indice che inizia con il campo che stai utilizzando nella query.
cioè
db.mycoll
.find({"_reference_2_id" : ObjectId("jkl7890123456")})
.hint("_reference_1_id_1__reference_2_id_1_id_1");