Svou odpověď jsem našel v této otázce:Pořadí $lt a $gt v dotazu na rozsah MongoDB
Můj index je víceklíčový index (na tags
) a spouštím dotaz na rozsah (v post_time
). Zřejmě
, MongoDB nemůže v tomto případě použít obě strany rozsahu jako filtr, takže pouze vybere $gte
doložka, která je na prvním místě. Protože můj spodní limit je shodou okolností nejnižší post_time
hodnotu, MongoDB začne skenovat všechny objekty.
Bohužel to není celý příběh. Při pokusu o vyřešení problému jsem také vytvořil indexy bez více klíčů, ale MongoDB trval na použití toho špatného. To mě přimělo si myslet, že problém je jinde. Nakonec jsem musel vypustit víceklíčový index a vytvořit jeden bez tags
pole. Nyní je vše v pořádku.