MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $count Aggregationsoperator

In MongoDB der $count Der Aggregationsoperator übergibt ein Dokument an die nächste Stufe in der Aggregationspipeline, die eine Zählung der Anzahl der in die aktuelle Stufe eingegebenen Dokumente enthält.

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 }

Wir können die folgende Aggregationsoperation verwenden, um die Anzahl der Hunde in der Sammlung zu zählen:

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

Ergebnis:

{ "DogCount" : 4 }

Die Aggregationspipeline funktioniert so, dass sie aus Stufen besteht. Jede Pipelinestufe liefert die Eingabe für die nächste Stufe.

Daher hat die erste Stufe im obigen Beispiel die Sammlung auf nur die Dokumente mit einem type gefiltert von dog . Die zweite Stufe nahm diese Dokumente, zählte sie und übergab das Ergebnis an die nächste Stufe. Da es die letzte Phase in der Pipeline war, haben wir die Ausgabe gesehen.

Gruppierte Dokumente zählen

Hier ist ein Beispiel, das den Aggregatoperator $group mit $count kombiniert, um eine Anzahl von jeder Art von Haustier unter einem bestimmten Gewicht zurückzugeben.

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

Ergebnis:

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

Fügen Sie eine Pipeline-Phase hinzu

In diesem Beispiel fügen wir eine Pipelinestufe hinzu, um die Ergebnisse zu sortieren. Insbesondere verwenden wir den $sort Operator, um dies zu tun.

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

Ergebnis:

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

In diesem Fall haben wir nach der Anzahl in absteigender Reihenfolge sortiert (der -1 gibt absteigende Reihenfolge an), dann nach _id in aufsteigender Reihenfolge (die 1 gibt aufsteigende Reihenfolge an).

Weitere Informationen

Weitere Informationen finden Sie in der MongoDB-Dokumentation.