In MongoDB il $sortByCount
la fase della pipeline di aggregazione raggruppa i documenti in arrivo in base al valore di un'espressione specificata, quindi calcola il conteggio dei documenti in ciascun gruppo distinto.
Ogni gruppo viene emesso nel proprio documento, composto da due campi:
- un
_id
campo contenente il valore di raggruppamento distinto e - un
count
campo contenente il numero di documenti appartenenti a quel raggruppamento.
I documenti sono ordinati per count
in ordine decrescente.
Esempio
Supponiamo di avere una collezione chiamata pets
con i seguenti documenti:
{ "_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 }
Di seguito è riportato un esempio di una query che utilizza $sortByCount
operatore.
db.pets.aggregate([
{ $match: {} },
{ $sortByCount: "$type" }
])
Risultato:
{ "_id" : "Dog", "count" : 4 } { "_id" : "Cat", "count" : 2 } { "_id" : "Bird", "count" : 2 } { "_id" : "Bat", "count" : 1 }
In questo esempio, viene prodotto ogni tipo di animale domestico, insieme al numero di animali di ogni rispettivo tipo.
Ciò equivale a quanto segue:
db.pets.aggregate([
{
$match: { }
},
{
$group: { _id: "$type", count: { $sum: 1 } }
},
{
$sort : { count : -1 }
}
])
Ecco un altro esempio, ma con criteri di filtraggio aggiunti.
db.pets.aggregate([
{
$match: { weight: { $lt: 15 } }
},
{
$sortByCount: "$type"
}
])
Risultato:
{ "_id" : "Cat", "count" : 2 } { "_id" : "Bird", "count" : 2 } { "_id" : "Dog", "count" : 1 } { "_id" : "Bat", "count" : 1 }
Questa volta solo un cane è nel documento passato a $sortByCount
, perché la prima fase dell'oleodotto ha rimosso i cani oltre un certo peso. Pertanto, $sortByCount
conta semplicemente i numeri dal documento fornito, che includeva un solo cane.
Maggiori informazioni
Consulta la documentazione di MongoDB per ulteriori informazioni.