sql >> Database teknologi >  >> NoSQL >> MongoDB

mongodb.countDocuments er langsom, når resultatsættet er stort, selvom indeks bruges

At tælle synes som en af ​​de ting, der burde være billige, men ofte ikke er. Fordi mongo ikke opretholder en optælling af antallet af dokumenter, der matcher visse kriterier i sit b-træ-indeks, skal den scanne gennem indeksoptællingsdokumenterne, mens den går. Det betyder, at det vil tage 100 gange tid at tælle dokumenterne, og det er nogenlunde det, vi ser her -- 0.018 * 100 = 1.8s .

For at fremskynde dette, har du et par muligheder:

  1. Det aktive antal er nogenlunde estimatedDocumentCount() - db.users.countDocuments({status: 'inactive'}) . Ville dette være nøjagtigt nok til din brug?
  2. Alternativt kan du opretholde en counts dokument i en separat samling, som du holder synkroniseret med antallet af aktive/inaktive dokumenter, du har.



  1. Hvordan genstarter jeg betinget løftekæden fra begyndelsen?

  2. Hvad er $unwind-operatøren i MongoDB?

  3. Mongoid:find gennem Array of ids

  4. grupper efter dato i mogodb-forespørgsel uden at tage tid i betragtning