sql >> Database teknologi >  >> NoSQL >> MongoDB

7 måder at tælle dokumenter i MongoDB

MongoDB tilbyder forskellige metoder til at tælle dokumenterne i en samling eller visning. Der er også nogle aggregeringsoperatører, der gør det muligt for dig at tælle indgående dokumenter fra et tidligere aggregeringspipeline-stadium.

Denne artikel præsenterer følgende måder at tælle dokumenter i mongo-skallen på:

  • tæller kommando
  • db.collection.count() metode
  • db.collection.countDocuments() metode
  • db.collection.estimatedDocumentCount() metode
  • cursor.count() metode
  • $count aggregeringspipeline-operatør
  • $sortByCount aggregeringspipeline-operatør

count Kommando

count kommando tæller antallet af dokumenter i en samling eller en visning.

Eksempel:

db.runCommand( { count:"kæledyr", forespørgsel:{ type:"Dog" } } ) 

Resultat:

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

I dette eksempel kan vi se, at der er fire hunde i kæledyr samling.

Vi kan også se, at det returnerer et dokument, der indeholder optællingen såvel som kommandostatus.

db.collection.count() Metode

db.collection.count() metoden returnerer antallet af dokumenter, der ville matche en find() forespørgsel til samlingen eller visningen.

samlingen del er navnet på samlingen eller visningen, der skal udføres tælleoperationen på.

db.collection.count() metode er en indpakningsmetode for count kommando.

Eksempel:

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

Resultat:

4

db.collection.count() metoden returnerer ikke et dokument som count kommando gør. Det returnerer simpelthen optællingen.

countDocuments() Metode

db.collection.countDocuments() metode returnerer antallet af dokumenter, der matcher forespørgslen for en samling eller visning.

samlingen del er navnet på samlingen eller visningen, der skal udføres tælleoperationen på.

Eksempel:

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

Resultat:

4

Grundlæggende det samme resultat som db.collection.count() , selvom det anbefales at bruge countDocuments() i stedet for count() hvis muligt.

MongoDB-dokumentationen siger:

MongoDB-drivere, der er kompatible med 4.0-funktionerne, forælder deres respektive markør og samling count() API'er til fordel for nye API'er til countDocuments() og estimatedDocumentCount() . For de specifikke API-navne for en given driver, se driverdokumentationen.

Også, når det bruges uden et forespørgselsprædikat, count() er afhængig af metadata, hvilket kan resultere i et omtrentligt antal. countDocuments() metoden på den anden side, er ikke afhængig af metadata og returnerer en nøjagtig optælling ved at udføre en aggregering af dokumenterne.

Det estimatedDocumentCount() Metode

db.collection.estimatedDocumentCount() metoden er en indpakning for count kommando, der returnerer antallet af alle dokumenter i en samling eller visning.

Eksempel:

db.pets.estimatedDocumentCount() 

Resultat:

7

db.collection.estimatedDocumentCount() metoden tager ikke et forespørgselsfilter. Den bruger i stedet metadata til at returnere dokumentantallet for hele samlingen/visningen.

cursor.count() Metode

cursor.count() metoden er en indpakning for count kommando, der tæller antallet af dokumenter, der refereres til af en markør..

Det udfører faktisk ikke forespørgslen. Det tæller simpelthen og returnerer antallet af resultater, der ville blive returneret af forespørgslen.

Eksempel:

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

Resultat:

4

Dette svarer til db.collection.count() metodeeksempel ovenfor.

Som citeret ovenfor, forælder MongoDB-drivere, der er kompatible med 4.0-funktionerne deres respektive markør og samling count() API'er til fordel for nye API'er til countDocuments() og estimatedDocumentCount() .

$count Aggregation Pipeline Operator

$count aggregeringsoperatør sender et dokument til det næste trin i aggregeringspipelinen, der indeholder en optælling af antallet af dokumenter, der er input til det aktuelle trin.

Eksempel:

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

Resultat:

{ "DogCount" :4 }

Her er et andet eksempel, der viser, hvordan du kan bruge denne operator til at tælle grupperede resultater.

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

Resultat:

{ "_id" :"Hund", "count" :3 }{ "_id" :"Kat", "count" :2 }{ "_id" :"Flagermus", "count" :1 } 

Denne særlige forespørgsel kan udføres med mindre kode ved at bruge $sortByCount aggregeringsrørledningsoperatør (nedenfor).

$sortByCount Aggregation Pipeline Operator

$sortByCount aggregeringsoperator grupperer indgående dokumenter baseret på værdien af ​​et specificeret udtryk og beregner derefter antallet af dokumenter i hver enkelt gruppe.

Sådan kan vi bruge $sortByCount for at opnå samme resultat som det foregående eksempel:

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

Resultat:

{ "_id" :"Hund", "count" :3 }{ "_id" :"Kat", "count" :2 }{ "_id" :"Flagermus", "count" :1 } 

Hver gruppe udskrives i sit eget dokument, som består af to felter:

  • et _id felt, der indeholder den særskilte grupperingsværdi, og
  • et antal felt, der indeholder antallet af dokumenter, der hører til den pågældende gruppe.

Dokumenterne er sorteret efter count i faldende rækkefølge.


  1. hvordan kan man gemme en Json i redis med hashmap(HSET)

  2. Mongo, find gennem listen over id'er

  3. Hvordan får man de sidste N poster i mongodb?

  4. Returner resultatet kun som en matrix af værdier