sql >> Database >  >> NoSQL >> MongoDB

MongoDB $sortByCount Aggregation Operator

In MongoDB de $sortByCount aggregatiepijplijnfase groepeert binnenkomende documenten op basis van de waarde van een opgegeven expressie en berekent vervolgens het aantal documenten in elke afzonderlijke groep.

Elke groep wordt uitgevoerd in zijn eigen document, dat uit twee velden bestaat:

  • een _id veld met de onderscheidende groeperingswaarde, en
  • een count veld met het aantal documenten dat tot die groepering behoort.

De documenten zijn gesorteerd op count in aflopende volgorde.

Voorbeeld

Stel dat we een verzameling hebben met de naam pets met de volgende documenten:

{ "_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 }

Hieronder ziet u een voorbeeld van een zoekopdracht die gebruikmaakt van de $sortByCount telefoniste.

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

Resultaat:

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

In dit voorbeeld voeren we elk huisdiertype uit, samen met het aantal huisdieren van elk respectievelijk type.

Dit komt overeen met het volgende:

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

Hier is nog een voorbeeld, maar met toegevoegde filtercriteria.

db.pets.aggregate([
    {
      $match: { weight: { $lt: 15 } }
    },
    {
      $sortByCount: "$type"
    }
])

Resultaat:

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

Deze keer is er maar één hond in het document dat is doorgegeven aan $sortByCount , omdat de eerste pijplijnfase honden boven een bepaald gewicht verwijderde. Daarom, $sortByCount telt gewoon de nummers van het document dat eraan is verstrekt, waarin slechts één hond stond.

Meer informatie

Zie de MongoDB-documentatie voor meer informatie.


  1. Lezen van DBname.system.indexes is mislukt op Atlas-cluster door mongobee na verbinding te hebben gemaakt

  2. Pymongo / MongoDB:index aanmaken of index verzekeren?

  3. Is het mogelijk om een ​​MongoDB-Query in te casten?

  4. Duw items in mongo-array via mangoest