sql >> Databasteknik >  >> NoSQL >> MongoDB

7 sätt att räkna dokument i MongoDB

MongoDB erbjuder olika metoder för att räkna dokumenten i en samling eller vy. Det finns också några aggregeringsoperatorer som gör att du kan räkna inkommande dokument från ett tidigare aggregeringspipelinesteg.

Den här artikeln presenterar följande sätt att räkna dokument i mongoskalet:

  • count kommando
  • Den db.collection.count() metod
  • db.collection.countDocuments() metod
  • db.collection.estimatedDocumentCount() metod
  • cursor.count() metod
  • $count aggregeringspipeline-operatör
  • $sortByCount aggregeringspipeline-operatör

count Kommando

count kommandot räknar antalet dokument i en samling eller en vy.

Exempel:

db.runCommand( { 
    count: "pets", 
    query: { type: "Dog" } 
} ) 

Resultat:

{ "n" :4, "ok" :1 }

I det här exemplet kan vi se att det finns fyra hundar i pets samling.

Vi kan också se att det returnerar ett dokument som innehåller räkningen såväl som kommandostatus.

db.collection.count() Metod

db.collection.count() metod returnerar antalet dokument som skulle matcha en find() fråga för samlingen eller vyn.

collection del är namnet på samlingen eller vyn att utföra räkneoperationen på.

db.collection.count() metod är en omslagsmetod för count kommando.

Exempel:

db.pets.count({
    "type": "Dog"
}) 

Resultat:

4

db.collection.count() metoden returnerar inte ett dokument som count kommandot gör. Det returnerar helt enkelt räkningen.

countDocuments() Metod

db.collection.countDocuments() metod returnerar antalet dokument som matchar frågan för en samling eller vy.

collection del är namnet på samlingen eller vyn att utföra räkneoperationen på.

Exempel:

db.pets.countDocuments({
    "type": "Dog"
}) 

Resultat:

4

I princip samma resultat som db.collection.count() , även om det rekommenderas att använda countDocuments() istället för count() om möjligt.

MongoDB-dokumentationen säger:

MongoDB-drivrutiner som är kompatibla med 4.0-funktionerna fasar ut deras respektive markör och samling count() API:er till förmån för nya API:er för countDocuments() och estimatedDocumentCount() . För specifika API-namn för en given drivrutin, se drivrutinsdokumentationen.

Dessutom, när det används utan ett frågepredikat, count() förlitar sig på metadata, vilket kan resultera i en ungefärlig räkning. countDocuments() metoden å andra sidan, förlitar sig inte på metadata och returnerar en korrekt räkning genom att utföra en aggregering av dokumenten.

Det estimatedDocumentCount() Metod

db.collection.estimatedDocumentCount() metoden är ett omslag för count kommando som returnerar antalet dokument i en samling eller vy.

Exempel:

db.pets.estimatedDocumentCount() 

Resultat:

7

db.collection.estimatedDocumentCount() metoden tar inte ett frågefilter. Den använder istället metadata för att returnera dokumentantalet för hela samlingen/vyn.

cursor.count() Metod

cursor.count() metoden är ett omslag för count kommando som räknar antalet dokument som en markör refererar till...

Den utför faktiskt inte frågan. Den räknar och returnerar helt enkelt antalet resultat som skulle returneras av frågan.

Exempel:

db.pets.find({"type": "Dog"}).count() 

Resultat:

4

Detta motsvarar db.collection.count() metodexempel ovan.

Som citerats ovan, tar MongoDB-drivrutiner som är kompatibla med 4.0-funktionerna ut deras respektive markör och samling count() API:er till förmån för nya API:er för countDocuments() och estimatedDocumentCount() .

$count Aggregation Pipeline Operator

$count aggregeringsoperatör skickar ett dokument till nästa steg i aggregeringspipelinen som innehåller en räkning av antalet dokument som matas in till det aktuella steget.

Exempel:

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

Resultat:

{ "DogCount" :4 }

Här är ett annat exempel som visar hur du kan använda den här operatorn för att räkna grupperade resultat.

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

Resultat:

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

Denna specifika fråga kan göras med mindre kod genom att använda $sortByCount aggregeringspipeline-operatör (nedan).

$sortByCount Aggregation Pipeline Operator

$sortByCount aggregeringsoperatorn grupperar inkommande dokument baserat på värdet av ett angivet uttryck och beräknar sedan antalet dokument i varje distinkt grupp.

Så här kan vi använda $sortByCount för att uppnå samma resultat som föregående exempel:

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

Resultat:

{ "_id" :"Hund", "count" :3 }{ "_id" :"Katt", "count" :2 }{ "_id" :"Bat", "count" :1 } 

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.


  1. Redis statistik

  2. batchSize-fältnamn ignoreras i Field Projection

  3. MongoDB $toUpper

  4. Ordningsföljd för svar på MongoDB $i fråga?