Habe meine Antwort in dieser Frage gefunden:Reihenfolge von $lt und $gt in der MongoDB-Bereichsabfrage
Mein Index ist ein Multikey-Index (auf tags
) und ich führe eine Bereichsabfrage aus (auf post_time
). Anscheinend
, MongoDB kann in diesem Fall nicht beide Seiten des Bereichs als Filter verwenden, also wählt es einfach den $gte
aus Klausel, die zuerst kommt. Da meine Untergrenze zufällig die niedrigste post_time
ist -Wert beginnt MongoDB mit dem Scannen aller Objekte.
Leider ist dies nicht die ganze Geschichte. Um das Problem zu lösen, habe ich auch Nicht-Multikey-Indizes erstellt, aber MongoDB bestand darauf, den schlechten zu verwenden. Das ließ mich denken, dass das Problem woanders lag. Schließlich musste ich den Multikey-Index löschen und einen ohne die tags
erstellen aufstellen. Jetzt ist alles in Ordnung.