Hittade mitt svar i denna fråga:Ordning av $lt och $gt i MongoDB-intervallfråga
Mitt index är ett multikey-index (på tags
) och jag kör en intervallfråga (på post_time
). Tenbarligen
, MongoDB kan inte använda båda sidor av intervallet som ett filter i det här fallet, så den väljer bara $gte
klausul, som kommer först. Eftersom min nedre gräns råkar vara den lägsta post_time
värde, börjar MongoDB skanna alla objekt.
Tyvärr är detta inte hela historien. För att försöka lösa problemet skapade jag även icke-multikey-index, men MongoDB insisterade på att använda det dåliga. Det fick mig att tro att problemet låg någon annanstans. Till slut var jag tvungen att släppa multikey-indexet och skapa ett utan tags
fält. Allt är bra nu.