Encontrei minha resposta nesta pergunta:Ordem de $lt e $gt na consulta de intervalo do MongoDB
O meu índice é um índice multichave (em
tags
) e estou executando uma consulta de intervalo (em post_time
). Aparentemente
, o MongoDB não pode usar ambos os lados do intervalo como filtro neste caso, então ele apenas seleciona o $gte
cláusula, que vem primeiro. Como meu limite inferior é o menor post_time
valor, o MongoDB começa a escanear todos os objetos. Infelizmente, esta não é toda a história. Tentando resolver o problema, criei índices não multichave também, mas o MongoDB insistiu em usar o ruim. Isso me fez pensar que o problema estava em outro lugar. Por fim, tive que descartar o índice multikey e criar um sem as
tags
campo. Tudo está bem agora.