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()
metoddb.collection.estimatedDocumentCount()
metodcursor.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örcountDocuments()
ochestimatedDocumentCount()
. 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.