In MongoDB de $sortByCount
aggregatiepijplijnfase groepeert binnenkomende documenten op basis van de waarde van een opgegeven expressie en berekent vervolgens het aantal documenten in elke afzonderlijke groep.
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.
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 } { "_id" : 8, "name" : "Tweet", "type" : "Bird", "weight" : 1 } { "_id" : 9, "name" : "Flutter", "type" : "Bird", "weight" : 2 }
Hieronder ziet u een voorbeeld van een zoekopdracht die gebruikmaakt van de $sortByCount
telefoniste.
db.pets.aggregate([
{ $match: {} },
{ $sortByCount: "$type" }
])
Resultaat:
{ "_id" : "Dog", "count" : 4 } { "_id" : "Cat", "count" : 2 } { "_id" : "Bird", "count" : 2 } { "_id" : "Bat", "count" : 1 }
In dit voorbeeld voeren we elk huisdiertype uit, samen met het aantal huisdieren van elk respectievelijk type.
Dit komt overeen met het volgende:
db.pets.aggregate([
{
$match: { }
},
{
$group: { _id: "$type", count: { $sum: 1 } }
},
{
$sort : { count : -1 }
}
])
Hier is nog een voorbeeld, maar met toegevoegde filtercriteria.
db.pets.aggregate([
{
$match: { weight: { $lt: 15 } }
},
{
$sortByCount: "$type"
}
])
Resultaat:
{ "_id" : "Cat", "count" : 2 } { "_id" : "Bird", "count" : 2 } { "_id" : "Dog", "count" : 1 } { "_id" : "Bat", "count" : 1 }
Deze keer is er maar één hond in het document dat is doorgegeven aan $sortByCount
, omdat de eerste pijplijnfase honden boven een bepaald gewicht verwijderde. Daarom, $sortByCount
telt gewoon de nummers van het document dat eraan is verstrekt, waarin slechts één hond stond.
Meer informatie
Zie de MongoDB-documentatie voor meer informatie.