sql >> Databáze >  >> NoSQL >> MongoDB

mongodb.countDocuments je pomalý, když je sada výsledků velká, i když je použit index

Počítání zdá se jako jedna z věcí, která by měla být levná, ale často není. Protože mongo neuchovává počet dokumentů, které odpovídají určitým kritériím ve svém indexu b-stromu, potřebuje průběžně skenovat dokumenty s počítáním indexů. To znamená, že stonásobné počítání dokumentů zabere 100krát více času, a to je zhruba to, co vidíme zde -- 0.018 * 100 = 1.8s .

Chcete-li to urychlit, máte několik možností:

  1. Aktivní počet je zhruba estimatedDocumentCount() - db.users.countDocuments({status: 'inactive'}) . Bylo by to dostatečně přesné pro váš případ použití?
  2. Případně můžete udržovat counts dokument v samostatné kolekci, kterou udržujete synchronizovanou s počtem aktivních/neaktivních dokumentů, které máte.



  1. mongo dotaz - získání konkrétního objektu (jeho `_id` je známo) z pole objektu ALE toto pole je také součástí seznamu dokumentů

  2. Server x vypršel během agregace MongoDB

  3. Spring-Mongo-Data Update umožňuje pouze jeden poziční argument?

  4. MongoDB $strLenBytes