MongoDB nabízí různé metody pro počítání dokumentů v kolekci nebo pohledu. Existují také některé agregační operátory, které vám umožňují počítat příchozí dokumenty z předchozí fáze agregačního kanálu.
Tento článek představuje následující způsoby počítání dokumentů v prostředí mongo:
count
příkaz- Příkaz
db.collection.count()
metoda - Funkce
db.collection.countDocuments()
metoda db.collection.estimatedDocumentCount()
metoda- Příkaz
cursor.count()
metoda $count
provozovatel agregačního potrubí$sortByCount
provozovatel agregačního potrubí
count
Příkaz
count
příkaz počítá počet dokumentů v kolekci nebo pohledu.
Příklad:
db.runCommand( {
count: "pets",
query: { type: "Dog" }
} )
Výsledek:
{ "n" :4, "ok" :1 }
V tomto příkladu můžeme vidět, že v pets
jsou čtyři psi kolekce.
Můžeme také vidět, že vrací dokument, který obsahuje počet i stav příkazu.
db.collection.count()
Metoda
db.collection.count()
metoda vrací počet dokumentů, které by odpovídaly find()
dotaz na kolekci nebo zobrazení.
collection
part je název kolekce nebo pohledu, na kterém se má operace počítání provést.
db.collection.count()
metoda je obalová metoda pro count
příkaz.
Příklad:
db.pets.count({
"type": "Dog"
})
Výsledek:
4
db.collection.count()
metoda nevrací dokument jako count
příkaz dělá. Jednoduše vrátí počet.
Počet countDocuments()
Metoda
db.collection.countDocuments()
metoda vrací počet dokumentů, které odpovídají dotazu pro kolekci nebo pohled.
collection
part je název kolekce nebo pohledu, na kterém se má operace počítání provést.
Příklad:
db.pets.countDocuments({
"type": "Dog"
})
Výsledek:
4
V podstatě stejný výsledek jako db.collection.count()
, i když se doporučuje použít countDocuments()
místo count()
pokud je to možné.
Dokumentace MongoDB uvádí:
Ovladače MongoDB kompatibilní s funkcemi 4.0 zastarávají svůj příslušný kurzor a kolekci
count()
Rozhraní API ve prospěch nových rozhraní API procountDocuments()
aestimatedDocumentCount()
. Konkrétní názvy API pro daný ovladač naleznete v dokumentaci ovladače.
Také při použití bez predikátu dotazu count()
spoléhá na metadata, což může vést k přibližnému počtu. countDocuments()
na druhé straně metoda nespoléhá na metadata a vrací přesný počet provedením agregace dokumentů.
estimatedDocumentCount()
Metoda
db.collection.estimatedDocumentCount()
metoda je obal pro count
příkaz, který vrátí počet všech dokumentů v kolekci nebo pohledu.
Příklad:
db.pets.estimatedDocumentCount()
Výsledek:
7
db.collection.estimatedDocumentCount()
metoda nepoužívá filtr dotazů. Místo toho používá metadata k vrácení počtu dokumentů pro celou kolekci/zobrazení.
cursor.count()
Metoda
cursor.count()
metoda je obal pro count
příkaz, který počítá počet dokumentů, na které odkazuje kurzor..
Ve skutečnosti neprovádí dotaz. Jednoduše spočítá a vrátí počet výsledků, které by dotaz vrátil.
Příklad:
db.pets.find({"type": "Dog"}).count()
Výsledek:
4
To je ekvivalentní k db.collection.count()
výše uvedený příklad metody.
Jak je uvedeno výše, ovladače MongoDB kompatibilní s funkcemi 4.0 zavrhují svůj příslušný kurzor a kolekci count()
Rozhraní API ve prospěch nových rozhraní API pro countDocuments()
a estimatedDocumentCount()
.
$count
Operátor agregačního potrubí
$count
operátor agregace předá dokument do další fáze v agregačním kanálu, který obsahuje počet dokumentů vložených do aktuální fáze.
Příklad:
db.pets.aggregate([
{
$match: { type: "Dog" }
},
{
$count: "DogCount"
}
])
Výsledek:
{ "Počet psů" :4 }
Zde je další příklad, který ukazuje, jak můžete tento operátor použít k počítání seskupených výsledků.
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$group: { _id: "$type", count: { $sum: 1 } }
},
{
$sort : { count : -1, _id: 1 }
}
])
Výsledek:
{ "_id" : "Dog", "count" : 3 }
{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 }
Tento konkrétní dotaz lze provést s menším množstvím kódu pomocí $sortByCount
operátor agregačního kanálu (níže).
$sortByCount
Operátor agregačního potrubí
$sortByCount
agregační operátor seskupuje příchozí dokumenty na základě hodnoty zadaného výrazu a poté vypočítá počet dokumentů v každé samostatné skupině.
Zde je návod, jak můžeme použít $sortByCount
k dosažení stejného výsledku jako v předchozím příkladu:
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$sortByCount: "$type"
}
])
Výsledek:
{ "_id" :"Pes", "count" :3 }{ "_id" :"Kočka", "count" :2 }{ "_id" :"Netopýr", "count" :1 }Každá skupina má výstup ve svém vlastním dokumentu, který se skládá ze dvou polí:
_id
pole obsahující odlišnou hodnotu seskupení a- a
count
pole obsahující počet dokumentů patřících do tohoto seskupení.
Dokumenty jsou seřazeny podle count
v sestupném pořadí.