sql >> Base de Datos >  >> NoSQL >> MongoDB

mongodb.countDocuments es lento cuando el conjunto de resultados es grande, incluso si se usa el índice

Contar parece como una de esas cosas que deberían ser baratas, pero a menudo no lo son. Debido a que mongo no mantiene un recuento de la cantidad de documentos que coinciden con ciertos criterios en su índice de árbol b, debe escanear el índice contando los documentos a medida que avanza. Eso significa que contar 100 veces los documentos tomará 100 veces el tiempo, y esto es más o menos lo que vemos aquí -- 0.018 * 100 = 1.8s .

Para acelerar esto, tiene algunas opciones:

  1. El recuento activo es aproximadamente estimatedDocumentCount() - db.users.countDocuments({status: 'inactive'}) . ¿Sería lo suficientemente preciso para su caso de uso?
  2. Alternativamente, puede mantener un counts documento en una colección separada que mantienes sincronizado con la cantidad de documentos activos/inactivos que tienes.