Você não tem nenhum índice que o mongo usará automaticamente para isso, então está fazendo uma varredura completa da tabela.
Conforme mencionado nos documentos
Por que
Se você tiver um índice em a,b - e pesquisar por
a
sozinho - um índice será usado automaticamente. Isso ocorre porque é o início do índice (o que é rápido de fazer), o db pode simplesmente ignorar o restante do valor do índice. Um índice em a,b é ineficiente ao pesquisar por
b
sozinho simplesmente porque não dá a possibilidade de usar o índice pesquisando com "começa com thisfixedstring". Então, ou:
- Inclua _reference_1_id na consulta (provavelmente irrelevante)
- OU adicione um índice em _reference_2_id (se você consulta pelo campo com frequência)
- OU use uma dica
Dica
Provavelmente sua opção de menor custo agora.
Adicione uma dica de consulta para forçar o uso de seu
_reference_1_id_1__reference_2_id_1_id_1
índice. O que provavelmente será muito mais rápido do que uma verificação completa da tabela, mas ainda muito mais lento do que um índice que começa com o campo que você está usando na consulta. ou seja
db.mycoll
.find({"_reference_2_id" : ObjectId("jkl7890123456")})
.hint("_reference_1_id_1__reference_2_id_1_id_1");