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ü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
_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.