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

MongoDB $sortByCount Aggregationsoperator

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.