MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

7 Möglichkeiten zum Zählen von Dokumenten in MongoDB

MongoDB bietet verschiedene Methoden zum Zählen der Dokumente in einer Sammlung oder Ansicht. Es gibt auch einige Aggregationsoperatoren, mit denen Sie eingehende Dokumente aus einer früheren Phase der Aggregationspipeline zählen können.

Dieser Artikel stellt die folgenden Möglichkeiten zum Zählen von Dokumenten in der Mongo-Shell vor:

  • Die count Befehl
  • Die db.collection.count() Methode
  • Der db.collection.countDocuments() Methode
  • Der db.collection.estimatedDocumentCount() Methode
  • Der cursor.count() Methode
  • Der $count Aggregation-Pipeline-Betreiber
  • Der $sortByCount Aggregation-Pipeline-Betreiber

Die count Befehl

Die count Der Befehl zählt die Anzahl der Dokumente in einer Sammlung oder Ansicht.

Beispiel:

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

Ergebnis:

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

In diesem Beispiel sehen wir, dass es in pets vier Hunde gibt Sammlung.

Wir können auch sehen, dass es ein Dokument zurückgibt, das sowohl die Anzahl als auch den Befehlsstatus enthält.

Die db.collection.count() Methode

Die db.collection.count() -Methode gibt die Anzahl der Dokumente zurück, die mit find() übereinstimmen würden Abfrage für die Sammlung oder Ansicht.

Die collection part ist der Name der Sammlung oder Ansicht, für die der Zählvorgang ausgeführt werden soll.

Die db.collection.count() Methode ist eine Wrapper-Methode für den count Befehl.

Beispiel:

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

Ergebnis:

4

Die db.collection.count() -Methode gibt kein Dokument wie count zurück Befehl tut. Es gibt einfach die Anzahl zurück.

Der countDocuments() Methode

Die db.collection.countDocuments() -Methode gibt die Anzahl der Dokumente zurück, die der Abfrage für eine Sammlung oder Ansicht entsprechen.

Die collection part ist der Name der Sammlung oder Ansicht, für die der Zählvorgang ausgeführt werden soll.

Beispiel:

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

Ergebnis:

4

Im Grunde dasselbe Ergebnis wie db.collection.count() , obwohl die Verwendung von countDocuments() empfohlen wird statt count() wenn möglich.

In der MongoDB-Dokumentation heißt es:

MongoDB-Treiber, die mit den 4.0-Funktionen kompatibel sind, verwerfen ihren jeweiligen Cursor und ihre Sammlung count() APIs zugunsten neuer APIs für countDocuments() und estimatedDocumentCount() . Die spezifischen API-Namen für einen bestimmten Treiber finden Sie in der Treiberdokumentation.

Bei Verwendung ohne Abfrageprädikat auch count() stützt sich auf Metadaten, die zu einer ungefähren Anzahl führen können. Die countDocuments() Die Methode hingegen ist nicht auf Metadaten angewiesen und gibt eine genaue Zählung zurück, indem sie eine Aggregation der Dokumente durchführt.

Der estimatedDocumentCount() Methode

Der db.collection.estimatedDocumentCount() Methode ist ein Wrapper für den count Befehl, der die Anzahl aller Dokumente in einer Sammlung oder Ansicht zurückgibt.

Beispiel:

db.pets.estimatedDocumentCount() 

Ergebnis:

7

Der db.collection.estimatedDocumentCount() -Methode verwendet keinen Abfragefilter. Stattdessen werden Metadaten verwendet, um die Anzahl der Dokumente für die gesamte Sammlung/Ansicht zurückzugeben.

Der cursor.count() Methode

Der cursor.count() Methode ist ein Wrapper für den count Befehl, der die Anzahl der Dokumente zählt, auf die ein Cursor verweist..

Es führt die Abfrage nicht wirklich aus. Es zählt einfach die Anzahl der Ergebnisse, die von der Abfrage zurückgegeben würden, und gibt sie zurück.

Beispiel:

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

Ergebnis:

4

Dies entspricht db.collection.count() Methodenbeispiel oben.

Wie oben zitiert, verwerfen MongoDB-Treiber, die mit den 4.0-Funktionen kompatibel sind, ihren jeweiligen Cursor und ihre Sammlung count() APIs zugunsten neuer APIs für countDocuments() und estimatedDocumentCount() .

Der $count Betreiber der Aggregationspipeline

Der $count Der Aggregationsoperator übergibt ein Dokument an die nächste Stufe in der Aggregationspipeline, die eine Zählung der Anzahl der in die aktuelle Stufe eingegebenen Dokumente enthält.

Beispiel:

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

Ergebnis:

{ "Anzahl der Hunde" :4 }

Hier ist ein weiteres Beispiel, das zeigt, wie Sie diesen Operator verwenden können, um gruppierte Ergebnisse zu zählen.

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

Ergebnis:

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

Diese spezielle Abfrage kann mit weniger Code durchgeführt werden, indem $sortByCount verwendet wird Aggregation-Pipeline-Operator (unten).

Der $sortByCount Betreiber der Aggregationspipeline

Der $sortByCount Der Aggregationsoperator gruppiert eingehende Dokumente basierend auf dem Wert eines angegebenen Ausdrucks und berechnet dann die Anzahl der Dokumente in jeder einzelnen Gruppe.

So können wir $sortByCount verwenden um dasselbe Ergebnis wie im vorherigen Beispiel zu erzielen:

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

Ergebnis:

{ "_id" :"Hund", "Anzahl" :3 }{ "_id" :"Katze", "Anzahl" :2 }{ "_id" :"Fledermaus", "Anzahl" :1 } 

Jede Gruppe wird in einem eigenen Dokument ausgegeben, das aus zwei Feldern besteht:

  • eine _id Feld, das den eindeutigen Gruppierungswert enthält, und
  • eine count Feld, das die Anzahl der Dokumente enthält, die zu dieser Gruppierung gehören.

Die Dokumente sind nach count sortiert in absteigender Reihenfolge.