In MongoDB 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
Stel dat we een verzameling hebben met de naam pets
met de volgende documenten:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 } { "_id" : 6, "name" : "Fetch", "type" : "Dog", "weight" : 17 } { "_id" : 7, "name" : "Jake", "type" : "Dog", "weight" : 30 }
We kunnen de volgende aggregatiebewerking gebruiken om het aantal honden in de verzameling te tellen:
db.pets.aggregate([
{
$match: { type: "Dog" }
},
{
$count: "DogCount"
}
])
Resultaat:
{ "DogCount" : 4 }
De manier waarop de aggregatiepijplijn werkt, is dat deze uit fasen bestaat. Elke pijplijnfase levert de input voor de volgende fase.
Daarom filterde de eerste fase in het bovenstaande voorbeeld de verzameling tot alleen die documenten met een type
van dog
. De tweede fase nam die documenten, telde ze en gaf het resultaat door aan de volgende fase. Aangezien het de laatste fase in de pijplijn was, zagen we de output.
Gegroepeerde documenten tellen
Hier is een voorbeeld dat de aggregatieoperator $group combineert met $count om een telling van elk type huisdier onder een bepaald gewicht te retourneren.
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$group: { _id: "$type", count: { $sum: 1 } }
}
])
Resultaat:
{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 }
{ "_id" : "Dog", "count" : 3 }
Een pijplijnfase toevoegen
In dit voorbeeld voegen we een pijplijnfase toe om de resultaten te sorteren. In het bijzonder gebruiken we de $sort
operator om dit te doen.
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 }
In dit geval hebben we gesorteerd op het aantal in aflopende volgorde (de -1
specificeert aflopende volgorde), dan door _id
in oplopende volgorde (de 1
specificeert oplopende volgorde).
Meer informatie
Zie de MongoDB-documentatie voor meer informatie.