Ho trovato la mia risposta in questa domanda:Ordine di $lt e $gt nella query dell'intervallo MongoDB
Il mio indice è un indice multichiave (su tags
) e sto eseguendo una query di intervallo (su post_time
). Apparentemente
, MongoDB non può utilizzare entrambi i lati dell'intervallo come filtro in questo caso, quindi seleziona semplicemente il $gte
clausola, che viene prima. Dato che il mio limite inferiore è il post_time
più basso valore, MongoDB avvia la scansione di tutti gli oggetti.
Sfortunatamente, questa non è l'intera storia. Cercando di risolvere il problema, ho creato anche indici non multichiave ma MongoDB ha insistito per usare quello cattivo. Questo mi ha fatto pensare che il problema fosse altrove. Infine, ho dovuto eliminare l'indice multichiave e crearne uno senza i tags
campo. Adesso va tutto bene.