sql >> Databasteknik >  >> NoSQL >> MongoDB

mongodb.countDocuments är långsam när resultatuppsättningen är stor även om index används

Räknar verkar som en av de saker som borde vara billiga, men ofta inte är det. Eftersom mongo inte upprätthåller en räkning av antalet dokument som matchar vissa kriterier i sitt b-tree-index, måste den skanna igenom indexräkningsdokumenten allt eftersom. Det betyder att att räkna 100 gånger dokumenten kommer att ta 100 gånger så lång tid, och det är ungefär vad vi ser här -- 0.018 * 100 = 1.8s .

För att påskynda detta har du några alternativ:

  1. Det aktiva antalet är ungefär estimatedDocumentCount() - db.users.countDocuments({status: 'inactive'}) . Skulle detta vara tillräckligt korrekt för ditt användningsfall?
  2. Alternativt kan du behålla en counts dokument i en separat samling som du håller synkroniserad med antalet aktiva/inaktiva dokument som du har.



  1. Hur sammanfogar man strängresultat från flera MongoDB-poster till ett enda resultat i MongoDB?

  2. MongoDB:fråga Array för "true" värde vid index n

  3. Hur lagrar man sorterad array tillbaka till MongoDB?

  4. Mongo:nätverksfel vid försök att köra kommandot 'whatsmyuri' på värden