MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

mongodb.countDocuments е бавен, когато наборът от резултати е голям, дори ако се използва индекс

Преброяването изглежда като едно от онези неща, които би трябвало да са евтини, но често не са. Тъй като mongo не поддържа преброяване на броя на документите, които отговарят на определени критерии в индекса на b-дървото, той трябва да сканира документите за броене на индекса, докато върви. Това означава, че преброяването на документите 100 пъти ще отнеме 100 пъти повече време и това е приблизително това, което виждаме тук -- 0.018 * 100 = 1.8s .

За да ускорите това, имате няколко опции:

  1. Активният брой е приблизително estimatedDocumentCount() - db.users.countDocuments({status: 'inactive'}) . Това ще бъде ли достатъчно точно за вашия случай на употреба?
  2. Алтернативно можете да поддържате counts документ в отделна колекция, която поддържате в синхрон с броя активни/неактивни документи, които имате.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Съхраняване на JSON схема в mongodb с spring

  2. MongoDB групиране и изваждане на стойности от различни документи

  3. MongoDB гарантира ли уникални стойности на полето _id при използване на съставен ключ на фрагмент с _id

  4. Как се избира това в MongoDB

  5. Как се поддържа редът на свойствата за сортиране в mongodb?