MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

mongodb.countDocuments é lento quando o conjunto de resultados é grande, mesmo que o índice seja usado


Contar parece como uma daquelas coisas que deveriam ser baratas, mas muitas vezes não são. Como o mongo não mantém uma contagem do número de documentos que correspondem a determinados critérios em seu índice de árvore b, ele precisa varrer os documentos de contagem de índice à medida que avança. Isso significa que contar 100 vezes os documentos levará 100 vezes o tempo, e isso é aproximadamente o que vemos aqui -- 0.018 * 100 = 1.8s .

Para acelerar isso, você tem algumas opções:
  1. A contagem ativa é aproximadamente estimatedDocumentCount() - db.users.countDocuments({status: 'inactive'}) . Isso seria preciso o suficiente para seu caso de uso?
  2. Como alternativa, você pode manter uma counts documento em uma coleção separada que você mantém em sincronia com o número de documentos ativos/inativos que você possui.