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

Operatore di aggregazione $count MongoDB

In MongoDB il $count l'operatore di aggregazione passa un documento alla fase successiva della pipeline di aggregazione che contiene un conteggio del numero di documenti immessi nella fase corrente.

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 }

Possiamo utilizzare la seguente operazione di aggregazione per contare il numero di cani nella collezione:

db.pets.aggregate([
    {
      $match: { type: "Dog" }
    },
    {
      $count: "DogCount"
    }
])

Risultato:

{ "DogCount" : 4 }

Il modo in cui funziona la pipeline di aggregazione è che si compone di fasi. Ciascuna fase della pipeline fornisce l'input per la fase successiva.

Pertanto, nell'esempio sopra, la prima fase ha filtrato la raccolta solo per quei documenti che avevano un type di dog . La seconda fase ha preso quei documenti, li ha contati e ha passato il risultato alla fase successiva. Dato che era l'ultima fase della pipeline, abbiamo visto l'output.

Conteggio dei documenti raggruppati

Ecco un esempio che combina l'operatore aggregato $group con $count per restituire un conteggio di ogni tipo di animale domestico al di sotto di un determinato peso.

db.pets.aggregate([
    {
      $match: { weight: { $lt: 30 } }
    },
    {
      $group: { _id: "$type", count: { $sum: 1 } }
    }
])

Risultato:

{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 }
{ "_id" : "Dog", "count" : 3 }

Aggiungi una fase pipeline

In questo esempio, aggiungiamo una fase della pipeline per ordinare i risultati. In particolare, utilizziamo il $sort operatore per farlo.

db.pets.aggregate([
    {
      $match: { weight: { $lt: 30 } }
    },
    {
      $group: { _id: "$type", count: { $sum: 1 } }
    },
     { 
      $sort : { count : -1, _id: 1 } 
    }
])

Risultato:

{ "_id" : "Dog", "count" : 3 }
{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 }

In questo caso, abbiamo ordinato il conteggio in ordine decrescente (il -1 specifica l'ordine decrescente), quindi da _id in ordine crescente (il 1 specifica l'ordine crescente).

Maggiori informazioni

Consulta la documentazione di MongoDB per ulteriori informazioni.