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
kommandodb.collection.count()
metodedb.collection.countDocuments()
metodedb.collection.estimatedDocumentCount()
metodecursor.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 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
_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.