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.