Znalazłem odpowiedź w tym pytaniu:Kolejność $lt i $gt w zapytaniu zakresu MongoDB
Mój indeks jest indeksem wielokluczowym (na tags
) i uruchamiam zapytanie o zakres (w post_time
). Najwyraźniej
, MongoDB nie może w tym przypadku używać obu stron zakresu jako filtru, więc po prostu wybiera $gte
klauzula, która jest na pierwszym miejscu. Ponieważ mój dolny limit jest najniższym post_time
MongoDB rozpocznie skanowanie wszystkich obiektów.
Niestety to nie wszystko. Próbując rozwiązać ten problem, stworzyłem również indeksy bez wielu kluczy, ale MongoDB nalegał na użycie złego. To sprawiło, że pomyślałem, że problem leży gdzie indziej. W końcu musiałem usunąć indeks multikey i utworzyć go bez tags
pole. Teraz wszystko jest w porządku.