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

7 způsobů, jak počítat dokumenty v MongoDB

MongoDB nabízí různé metody pro počítání dokumentů v kolekci nebo pohledu. Existují také některé agregační operátory, které vám umožňují počítat příchozí dokumenty z předchozí fáze agregačního kanálu.

Tento článek představuje následující způsoby počítání dokumentů v prostředí mongo:

  • count příkaz
  • Příkaz db.collection.count() metoda
  • Funkce db.collection.countDocuments() metoda
  • db.collection.estimatedDocumentCount() metoda
  • Příkaz cursor.count() metoda
  • $count provozovatel agregačního potrubí
  • $sortByCount provozovatel agregačního potrubí

count Příkaz

count příkaz počítá počet dokumentů v kolekci nebo pohledu.

Příklad:

db.runCommand( { 
    count: "pets", 
    query: { type: "Dog" } 
} ) 

Výsledek:

{ "n" :4, "ok" :1 }

V tomto příkladu můžeme vidět, že v pets jsou čtyři psi kolekce.

Můžeme také vidět, že vrací dokument, který obsahuje počet i stav příkazu.

db.collection.count() Metoda

db.collection.count() metoda vrací počet dokumentů, které by odpovídaly find() dotaz na kolekci nebo zobrazení.

collection part je název kolekce nebo pohledu, na kterém se má operace počítání provést.

db.collection.count() metoda je obalová metoda pro count příkaz.

Příklad:

db.pets.count({
    "type": "Dog"
}) 

Výsledek:

4

db.collection.count() metoda nevrací dokument jako count příkaz dělá. Jednoduše vrátí počet.

Počet countDocuments() Metoda

db.collection.countDocuments() metoda vrací počet dokumentů, které odpovídají dotazu pro kolekci nebo pohled.

collection part je název kolekce nebo pohledu, na kterém se má operace počítání provést.

Příklad:

db.pets.countDocuments({
    "type": "Dog"
}) 

Výsledek:

4

V podstatě stejný výsledek jako db.collection.count() , i když se doporučuje použít countDocuments() místo count() pokud je to možné.

Dokumentace MongoDB uvádí:

Ovladače MongoDB kompatibilní s funkcemi 4.0 zastarávají svůj příslušný kurzor a kolekci count() Rozhraní API ve prospěch nových rozhraní API pro countDocuments() a estimatedDocumentCount() . Konkrétní názvy API pro daný ovladač naleznete v dokumentaci ovladače.

Také při použití bez predikátu dotazu count() spoléhá na metadata, což může vést k přibližnému počtu. countDocuments() na druhé straně metoda nespoléhá na metadata a vrací přesný počet provedením agregace dokumentů.

estimatedDocumentCount() Metoda

db.collection.estimatedDocumentCount() metoda je obal pro count příkaz, který vrátí počet všech dokumentů v kolekci nebo pohledu.

Příklad:

db.pets.estimatedDocumentCount() 

Výsledek:

7

db.collection.estimatedDocumentCount() metoda nepoužívá filtr dotazů. Místo toho používá metadata k vrácení počtu dokumentů pro celou kolekci/zobrazení.

cursor.count() Metoda

cursor.count() metoda je obal pro count příkaz, který počítá počet dokumentů, na které odkazuje kurzor..

Ve skutečnosti neprovádí dotaz. Jednoduše spočítá a vrátí počet výsledků, které by dotaz vrátil.

Příklad:

db.pets.find({"type": "Dog"}).count() 

Výsledek:

4

To je ekvivalentní k db.collection.count() výše uvedený příklad metody.

Jak je uvedeno výše, ovladače MongoDB kompatibilní s funkcemi 4.0 zavrhují svůj příslušný kurzor a kolekci count() Rozhraní API ve prospěch nových rozhraní API pro countDocuments() a estimatedDocumentCount() .

$count Operátor agregačního potrubí

$count operátor agregace předá dokument do další fáze v agregačním kanálu, který obsahuje počet dokumentů vložených do aktuální fáze.

Příklad:

db.pets.aggregate([
    {
      $match: { type: "Dog" }
    },
    {
      $count: "DogCount"
    }
]) 

Výsledek:

{ "Počet psů" :4 }

Zde je další příklad, který ukazuje, jak můžete tento operátor použít k počítání seskupených výsledků.

db.pets.aggregate([
    {
      $match: { weight: { $lt: 30 } }
    },
    {
      $group: { _id: "$type", count: { $sum: 1 } }
    },
     { 
      $sort : { count : -1, _id: 1 } 
    }
]) 

Výsledek:

{ "_id" : "Dog", "count" : 3 }
{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 } 

Tento konkrétní dotaz lze provést s menším množstvím kódu pomocí $sortByCount operátor agregačního kanálu (níže).

$sortByCount Operátor agregačního potrubí

$sortByCount agregační operátor seskupuje příchozí dokumenty na základě hodnoty zadaného výrazu a poté vypočítá počet dokumentů v každé samostatné skupině.

Zde je návod, jak můžeme použít $sortByCount k dosažení stejného výsledku jako v předchozím příkladu:

db.pets.aggregate([
    {
      $match: { weight: { $lt: 30 } }
    },
    {
      $sortByCount: "$type"
    }
]) 

Výsledek:

{ "_id" :"Pes", "count" :3 }{ "_id" :"Kočka", "count" :2 }{ "_id" :"Netopýr", "count" :1 } 

Každá skupina má výstup ve svém vlastním dokumentu, který se skládá ze dvou polí:

  • _id pole obsahující odlišnou hodnotu seskupení a
  • a count pole obsahující počet dokumentů patřících do tohoto seskupení.

Dokumenty jsou seřazeny podle count v sestupném pořadí.


  1. Jak uložit komplexní vnořený JSON v Redis pomocí Pythonu

  2. Jak se dotazovat MongoDB s likem

  3. Jak efektivně vložit miliardu dat do Redis?

  4. Šest kritických součástí úspěšné správy dat