Fandt mit svar i dette spørgsmål:Rækkefølge på $lt og $gt i MongoDB-intervalforespørgsel
Mit indeks er et multikey-indeks (på tags ), og jeg kører en intervalforespørgsel (på post_time ). Tilsyneladende
, MongoDB kan ikke bruge begge sider af området som et filter i dette tilfælde, så det vælger bare $gte klausul, som kommer først. Da min nedre grænse tilfældigvis er den laveste post_time værdi, begynder MongoDB at scanne alle objekterne.
Det er desværre ikke hele historien. For at løse problemet oprettede jeg også ikke-multikey-indekser, men MongoDB insisterede på at bruge det dårlige. Det fik mig til at tro, at problemet var et andet sted. Til sidst måtte jeg droppe multikey-indekset og oprette et uden tags Mark. Alt er fint nu.