Encontré mi respuesta en esta pregunta:Orden de $lt y $gt en la consulta de rango de MongoDB
Mi índice es un índice multiclave (en tags
) y estoy ejecutando una consulta de rango (en post_time
). Aparentemente
, MongoDB no puede usar ambos lados del rango como filtro en este caso, por lo que solo elige el $gte
cláusula, la que viene primero. Como mi límite inferior resulta ser el post_time
más bajo valor, MongoDB comienza a escanear todos los objetos.
Desafortunadamente, esta no es toda la historia. Tratando de resolver el problema, también creé índices que no son multiclave, pero MongoDB insistió en usar el malo. Eso me hizo pensar que el problema estaba en otra parte. Finalmente, tuve que eliminar el índice multiclave y crear uno sin las tags
campo. Todo está bien ahora.