MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

mongodb.countDocuments est lent lorsque le jeu de résultats est volumineux même si l'index est utilisé

Compter semble comme une de ces choses qui devraient être bon marché, mais qui ne le sont souvent pas. Étant donné que mongo ne tient pas compte du nombre de documents correspondant à certains critères dans son index b-tree, il doit parcourir l'index en comptant les documents au fur et à mesure. Cela signifie que compter 100x les documents prendra 100x plus de temps, et c'est à peu près ce que nous voyons ici -- 0.018 * 100 = 1.8s .

Pour accélérer cela, vous avez quelques options :

  1. Le nombre d'actifs est approximativement estimatedDocumentCount() - db.users.countDocuments({status: 'inactive'}) . Serait-ce suffisamment précis pour votre cas d'utilisation ?
  2. Vous pouvez également conserver un counts document dans une collection distincte que vous synchronisez avec le nombre de documents actifs/inactifs dont vous disposez.