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ællerkommandodb.collection.count()metodedb.collection.countDocuments()metodedb.collection.estimatedDocumentCount()metodecursor.count()metode$countaggregeringspipeline-operatør$sortByCountaggregeringspipeline-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 tilcountDocuments()ogestimatedDocumentCount(). 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
_idfelt, der indeholder den særskilte grupperingsværdi, og - et
antalfelt, der indeholder antallet af dokumenter, der hører til den pågældende gruppe.
Dokumenterne er sorteret efter count i faldende rækkefølge.