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
_idveld met de onderscheidende groeperingswaarde, en - een
countveld 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.