sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $sortByCount Aggregationsoperatör

I MongoDB är $sortByCount aggregeringspipeline-stadiet grupperar inkommande dokument baserat på värdet av ett angivet uttryck och beräknar sedan antalet dokument i varje distinkt grupp.

Varje grupp matas ut i sitt eget dokument, som består av två fält:

  • ett _id fält som innehåller det distinkta grupperingsvärdet, och
  • ett count fält som innehåller antalet dokument som hör till den gruppen.

Dokumenten sorteras efter count i fallande ordning.

Exempel

Anta att vi har en samling som heter pets med följande dokument:

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

Nedan är ett exempel på en fråga som använder $sortByCount operatör.

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

Resultat:

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

I det här exemplet matar vi ut varje husdjurstyp tillsammans med antalet husdjur av respektive typ.

Detta motsvarar följande:

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

Här är ett annat exempel, men med tillagda filtreringskriterier.

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

Resultat:

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

Den här gången finns endast en hund i dokumentet som skickas till $sortByCount , eftersom det första pipelinesteget tog bort hundar över en viss vikt. Därför $sortByCount räknar helt enkelt siffrorna från dokumentet som tillhandahålls till den, som bara inkluderade en hund.

Mer information

Se MongoDB-dokumentationen för mer information.


  1. Laravel - Löpande jobb i sekvens

  2. Ta bort en-en och en-många referenser - Mongoose

  3. Kontrollera om redis körs -> node js

  4. ImportError:Ingen modul med namnet objectid