sql >> Database >  >> NoSQL >> MongoDB

MongoDB $count Aggregation Operator

In MongoDB de $count aggregatie-operator geeft een document door aan de volgende fase in de aggregatiepijplijn die een telling bevat van het aantal documenten dat in de huidige fase is ingevoerd.

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 }

We kunnen de volgende aggregatiebewerking gebruiken om het aantal honden in de verzameling te tellen:

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

Resultaat:

{ "DogCount" : 4 }

De manier waarop de aggregatiepijplijn werkt, is dat deze uit fasen bestaat. Elke pijplijnfase levert de input voor de volgende fase.

Daarom filterde de eerste fase in het bovenstaande voorbeeld de verzameling tot alleen die documenten met een type van dog . De tweede fase nam die documenten, telde ze en gaf het resultaat door aan de volgende fase. Aangezien het de laatste fase in de pijplijn was, zagen we de output.

Gegroepeerde documenten tellen

Hier is een voorbeeld dat de aggregatieoperator $group combineert met $count om een ​​telling van elk type huisdier onder een bepaald gewicht te retourneren.

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

Resultaat:

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

Een pijplijnfase toevoegen

In dit voorbeeld voegen we een pijplijnfase toe om de resultaten te sorteren. In het bijzonder gebruiken we de $sort operator om dit te doen.

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

Resultaat:

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

In dit geval hebben we gesorteerd op het aantal in aflopende volgorde (de -1 specificeert aflopende volgorde), dan door _id in oplopende volgorde (de 1 specificeert oplopende volgorde).

Meer informatie

Zie de MongoDB-documentatie voor meer informatie.


  1. Hoe ongebruikte indexen in MongoDB te vinden?

  2. Hoe het .bson-bestandsformaat op mongodb te importeren

  3. MongoDB-groep en som met id als sleutel

  4. Hoe kan ik de MongoDB native Javascript-driver beloven met bluebird?