sql >> Database >  >> NoSQL >> MongoDB

mongodb.countDocuments is traag wanneer de resultatenset groot is, zelfs als de index wordt gebruikt

Tellen lijkt als een van die dingen die goedkoop zouden moeten zijn, maar dat vaak niet is. Omdat mongo geen telling bijhoudt van het aantal documenten dat aan bepaalde criteria voldoet in zijn b-tree-index, moet het gaandeweg door de index-tellingsdocumenten bladeren. Dat betekent dat het 100x tellen van de documenten 100x de tijd kost, en dit is ongeveer wat we hier zien -- 0.018 * 100 = 1.8s .

Om dit te versnellen, heb je een paar opties:

  1. Het actieve aantal is ongeveer estimatedDocumentCount() - db.users.countDocuments({status: 'inactive'}) . Zou dit nauwkeurig genoeg zijn voor uw gebruik?
  2. Als alternatief kunt u een counts document in een aparte collectie die u synchroon houdt met het aantal actieve/inactieve documenten dat u heeft.



  1. NoSQL (MongoDB) vs Lucene (of Solr) als uw database

  2. MongoDB:moet u vooraf een document toewijzen als u $addToSet of $push gebruikt?

  3. node.js kan module 'mongodb' niet vinden

  4. Mongoose document update fout