MongoDB biedt verschillende methoden om de documenten in een verzameling of weergave te tellen. Er zijn ook enkele aggregatie-operators waarmee u inkomende documenten van een eerdere aggregatiepijplijnfase kunt tellen.
Dit artikel presenteert de volgende manieren om documenten in de mongo-shell te tellen:
- De
count
commando - De
db.collection.count()
methode - De
db.collection.countDocuments()
methode - De
db.collection.estimatedDocumentCount()
methode - De
cursor.count()
methode - De
$count
aggregatie pijpleiding operator - De
$sortByCount
aggregatie pijpleiding operator
De count
Commando
De count
commando telt het aantal documenten in een verzameling of een weergave.
Voorbeeld:
db.runCommand( {
count: "pets",
query: { type: "Dog" }
} )
Resultaat:
{ "n" : 4, "ok" : 1 }
In dit voorbeeld kunnen we zien dat er vier honden zijn in de pets
collectie.
We kunnen ook zien dat het een document retourneert dat zowel de telling als de opdrachtstatus bevat.
De db.collection.count()
Methode
De db.collection.count()
methode retourneert het aantal documenten dat zou overeenkomen met een find()
vraag voor de verzameling of weergave.
De collection
deel is de naam van de verzameling of weergave waarop de telbewerking moet worden uitgevoerd.
De db.collection.count()
methode is een wrapper-methode voor de count
commando.
Voorbeeld:
db.pets.count({
"type": "Dog"
})
Resultaat:
4
De db.collection.count()
methode retourneert geen document zoals de count
opdracht doet. Het geeft gewoon de telling terug.
De countDocuments()
Methode
De db.collection.countDocuments()
methode retourneert het aantal documenten dat overeenkomt met de zoekopdracht voor een verzameling of weergave.
De collection
deel is de naam van de verzameling of weergave waarop de telbewerking moet worden uitgevoerd.
Voorbeeld:
db.pets.countDocuments({
"type": "Dog"
})
Resultaat:
4
In principe hetzelfde resultaat als db.collection.count()
, hoewel het wordt aanbevolen om countDocuments()
. te gebruiken in plaats van count()
indien mogelijk.
In de MongoDB-documentatie staat:
MongoDB-stuurprogramma's die compatibel zijn met de 4.0-functies depreciëren hun respectieve cursor en verzameling
count()
API's in het voordeel van nieuwe API's voorcountDocuments()
enestimatedDocumentCount()
. Zie de driverdocumentatie voor de specifieke API-namen voor een bepaalde driver.
Ook, wanneer gebruikt zonder een query-predikaat, count()
is afhankelijk van metadata, wat kan resulteren in een geschatte telling. De countDocuments()
methode daarentegen is niet afhankelijk van metadata en geeft een nauwkeurige telling terug door een aggregatie van de documenten uit te voeren.
De estimatedDocumentCount()
Methode
De db.collection.estimatedDocumentCount()
methode is een wrapper voor de count
commando dat de telling van alle documenten in een verzameling of weergave retourneert.
Voorbeeld:
db.pets.estimatedDocumentCount()
Resultaat:
7
De db.collection.estimatedDocumentCount()
methode heeft geen queryfilter nodig. In plaats daarvan gebruikt het metadata om het aantal documenten voor de hele verzameling/weergave te retourneren.
De cursor.count()
Methode
De cursor.count()
methode is een wrapper voor de count
commando dat het aantal documenten telt waarnaar door een cursor wordt verwezen..
Het voert de query niet echt uit. Het telt gewoon en geeft het aantal resultaten terug dat door de zoekopdracht zou worden geretourneerd.
Voorbeeld:
db.pets.find({"type": "Dog"}).count()
Resultaat:
4
Dit is gelijk aan de db.collection.count()
methodevoorbeeld hierboven.
Zoals hierboven geciteerd, depreciëren MongoDB-stuurprogramma's die compatibel zijn met de 4.0-functies hun respectieve cursor en verzameling count()
API's in het voordeel van nieuwe API's voor countDocuments()
en estimatedDocumentCount()
.
De $count
Aggregatiepijplijnoperator
De $count
aggregatie-operator geeft een document door aan de volgende fase in de aggregatiepijplijn die een telling bevat van het aantal documenten dat in de huidige fase is ingevoerd.
Voorbeeld:
db.pets.aggregate([
{
$match: { type: "Dog" }
},
{
$count: "DogCount"
}
])
Resultaat:
{ "DogCount" : 4 }
Hier is nog een voorbeeld dat laat zien hoe u deze operator kunt gebruiken om gegroepeerde resultaten te tellen.
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$group: { _id: "$type", count: { $sum: 1 } }
},
{
$sort : { count : -1, _id: 1 }
}
])
Resultaat:
{ "_id" : "Dog", "count" : 3 }
{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 }
Deze specifieke zoekopdracht kan worden gedaan met minder code door gebruik te maken van de $sortByCount
aggregatie pijpleiding operator (hieronder).
De $sortByCount
Aggregatiepijplijnoperator
De $sortByCount
aggregatie-operator groepeert binnenkomende documenten op basis van de waarde van een opgegeven uitdrukking en berekent vervolgens het aantal documenten in elke afzonderlijke groep.
Hier is hoe we $sortByCount
kunnen gebruiken om hetzelfde resultaat te bereiken als in het vorige voorbeeld:
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$sortByCount: "$type"
}
])
Resultaat:
{ "_id" : "Dog", "count" : 3 } { "_id" : "Cat", "count" : 2 } { "_id" : "Bat", "count" : 1 }
Elke groep wordt uitgevoerd in zijn eigen document, dat uit twee velden bestaat:
- een
_id
veld met de onderscheidende groeperingswaarde, en - een
count
veld met het aantal documenten dat tot die groepering behoort.
De documenten zijn gesorteerd op count
in aflopende volgorde.