In MongoDB der $sortByCount
Die Phase der Aggregationspipeline gruppiert eingehende Dokumente basierend auf dem Wert eines angegebenen Ausdrucks und berechnet dann die Anzahl der Dokumente in jeder einzelnen Gruppe.
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.
Beispiel
Angenommen, wir haben eine Sammlung namens pets
mit folgenden Dokumenten:
{ "_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 }
Unten sehen Sie ein Beispiel für eine Abfrage, die $sortByCount
verwendet Betreiber.
db.pets.aggregate([
{ $match: {} },
{ $sortByCount: "$type" }
])
Ergebnis:
{ "_id" : "Dog", "count" : 4 } { "_id" : "Cat", "count" : 2 } { "_id" : "Bird", "count" : 2 } { "_id" : "Bat", "count" : 1 }
In diesem Beispiel geben wir jeden Haustiertyp zusammen mit der Anzahl der Haustiere des jeweiligen Typs aus.
Dies entspricht dem Folgenden:
db.pets.aggregate([
{
$match: { }
},
{
$group: { _id: "$type", count: { $sum: 1 } }
},
{
$sort : { count : -1 }
}
])
Hier ist ein weiteres Beispiel, aber mit zusätzlichen Filterkriterien.
db.pets.aggregate([
{
$match: { weight: { $lt: 15 } }
},
{
$sortByCount: "$type"
}
])
Ergebnis:
{ "_id" : "Cat", "count" : 2 } { "_id" : "Bird", "count" : 2 } { "_id" : "Dog", "count" : 1 } { "_id" : "Bat", "count" : 1 }
Diesmal ist nur ein Hund in dem an $sortByCount
übergebenen Dokument , weil die erste Pipelinestufe Hunde über einem bestimmten Gewicht entfernte. Daher $sortByCount
zählt einfach die Nummern aus dem ihm vorgelegten Dokument, das nur einen Hund enthielt.
Weitere Informationen
Weitere Informationen finden Sie in der MongoDB-Dokumentation.