MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

mongodb.countDocuments è lento quando il set di risultati è grande anche se viene utilizzato index

Il conteggio sembra come una di quelle cose che dovrebbero essere economiche, ma spesso non lo sono. Poiché mongo non mantiene un conteggio del numero di documenti che soddisfano determinati criteri nel suo indice b-tree, deve eseguire la scansione dell'indice contando i documenti man mano che procede. Ciò significa che contando 100 volte i documenti impiegheranno 100 volte il tempo, e questo è più o meno ciò che vediamo qui -- 0.018 * 100 = 1.8s .

Per accelerare, hai alcune opzioni:

  1. Il conteggio attivo è all'incirca estimatedDocumentCount() - db.users.countDocuments({status: 'inactive'}) . Sarebbe abbastanza accurato per il tuo caso d'uso?
  2. In alternativa, puoi mantenere un counts documento in una raccolta separata che mantieni sincronizzato con il numero di documenti attivi/non attivi che hai.