J'ai trouvé ma réponse dans cette question :Ordre de $lt et $gt dans la requête de plage MongoDB
Mon index est un index multiclé (sur tags
) et j'exécute une requête de plage (sur post_time
). Apparemment
, MongoDB ne peut pas utiliser les deux côtés de la plage comme filtre dans ce cas, donc il sélectionne simplement le $gte
clause, qui vient en premier. Comme ma limite inférieure se trouve être le plus bas post_time
valeur, MongoDB commence à scanner tous les objets.
Malheureusement, ce n'est pas toute l'histoire. En essayant de résoudre le problème, j'ai également créé des index non multi-clés, mais MongoDB a insisté pour utiliser le mauvais. Cela m'a fait penser que le problème était ailleurs. Enfin, j'ai dû supprimer l'index multiclé et en créer un sans les tags
champ. Tout va bien maintenant.