MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Operatore di aggregazione MongoDB $ sortByCount

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.