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
countBefehl - Die
db.collection.count()Methode - Der
db.collection.countDocuments()Methode - Der
db.collection.estimatedDocumentCount()Methode - Der
cursor.count()Methode - Der
$countAggregation-Pipeline-Betreiber - Der
$sortByCountAggregation-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ürcountDocuments()undestimatedDocumentCount(). 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
_idFeld, das den eindeutigen Gruppierungswert enthält, und - eine
countFeld, das die Anzahl der Dokumente enthält, die zu dieser Gruppierung gehören.
Die Dokumente sind nach count sortiert in absteigender Reihenfolge.