MongoDB offre vari metodi per contare i documenti in una raccolta o vista. Sono inoltre disponibili alcuni operatori di aggregazione che consentono di contare i documenti in arrivo da una precedente fase della pipeline di aggregazione.
Questo articolo presenta i seguenti modi per contare i documenti nella mongo shell:
- Il
count
comando - Il
db.collection.count()
metodo - Il
db.collection.countDocuments()
metodo - Il
db.collection.estimatedDocumentCount()
metodo - Il
cursor.count()
metodo - Il
$count
operatore della pipeline di aggregazione - Il
$sortByCount
operatore della pipeline di aggregazione
Il count
Comando
Il count
comando conta il numero di documenti in una raccolta o in una vista.
Esempio:
db.runCommand( {
count: "pets",
query: { type: "Dog" }
} )
Risultato:
{ "n" : 4, "ok" : 1 }
In questo esempio, possiamo vedere che ci sono quattro cani in pets
raccolta.
Possiamo anche vedere che restituisce un documento che contiene il conteggio e lo stato del comando.
Il db.collection.count()
Metodo
Il db.collection.count()
il metodo restituisce il conteggio dei documenti che corrisponderebbero a un find()
query per la raccolta o la visualizzazione.
La collection
part è il nome della raccolta o della vista su cui eseguire l'operazione di conteggio.
Il db.collection.count()
method è un metodo wrapper per il count
comando.
Esempio:
db.pets.count({
"type": "Dog"
})
Risultato:
4
Il db.collection.count()
il metodo non restituisce un documento come il count
comando fa. Restituisce semplicemente il conteggio.
Il countDocuments()
Metodo
Il db.collection.countDocuments()
restituisce il conteggio dei documenti che corrispondono alla query per una raccolta o una vista.
La collection
part è il nome della raccolta o della vista su cui eseguire l'operazione di conteggio.
Esempio:
db.pets.countDocuments({
"type": "Dog"
})
Risultato:
4
Fondamentalmente lo stesso risultato di db.collection.count()
, anche se si consiglia di utilizzare countDocuments()
invece di count()
se possibile.
La documentazione di MongoDB afferma:
I driver MongoDB compatibili con le funzionalità 4.0 deprecano il rispettivo cursore e la raccolta
count()
API a favore di nuove API percountDocuments()
eestimatedDocumentCount()
. Per i nomi API specifici per un determinato driver, consulta la documentazione del driver.
Inoltre, se utilizzato senza un predicato di query, count()
si basa sui metadati, che possono comportare un conteggio approssimativo. Il countDocuments()
metodo d'altra parte, non si basa sui metadati e restituisce un conteggio accurato eseguendo un'aggregazione dei documenti.
Il estimatedDocumentCount()
Metodo
Il db.collection.estimatedDocumentCount()
è un wrapper per il count
comando che restituisce il conteggio di tutti i documenti in una raccolta o vista.
Esempio:
db.pets.estimatedDocumentCount()
Risultato:
7
Il db.collection.estimatedDocumentCount()
il metodo non accetta un filtro di query. Utilizza invece i metadati per restituire il conteggio dei documenti per l'intera raccolta/vista.
Il cursor.count()
Metodo
Il cursor.count()
è un wrapper per il count
comando che conta il numero di documenti referenziati da un cursore..
In realtà non esegue la query. Conta e restituisce semplicemente il numero di risultati che verrebbero restituiti dalla query.
Esempio:
db.pets.find({"type": "Dog"}).count()
Risultato:
4
Questo equivale a db.collection.count()
esempio di metodo sopra.
Come citato sopra, i driver MongoDB compatibili con le funzionalità 4.0 deprecano il rispettivo cursore e raccolta count()
API a favore di nuove API per countDocuments()
e estimatedDocumentCount()
.
Il $count
Operatore di condotte di aggregazione
Il $count
l'operatore di aggregazione passa un documento alla fase successiva della pipeline di aggregazione che contiene un conteggio del numero di documenti immessi nella fase corrente.
Esempio:
db.pets.aggregate([
{
$match: { type: "Dog" }
},
{
$count: "DogCount"
}
])
Risultato:
{ "DogCount" : 4 }
Ecco un altro esempio che mostra come puoi utilizzare questo operatore per contare i risultati raggruppati.
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$group: { _id: "$type", count: { $sum: 1 } }
},
{
$sort : { count : -1, _id: 1 }
}
])
Risultato:
{ "_id" : "Dog", "count" : 3 }
{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 }
Questa particolare query può essere eseguita con meno codice utilizzando $sortByCount
operatore della pipeline di aggregazione (sotto).
Il $sortByCount
Operatore di condotte di aggregazione
Il $sortByCount
l'operatore di aggregazione raggruppa i documenti in entrata in base al valore di un'espressione specificata, quindi calcola il conteggio dei documenti in ciascun gruppo distinto.
Ecco come possiamo usare $sortByCount
per ottenere lo stesso risultato dell'esempio precedente:
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$sortByCount: "$type"
}
])
Risultato:
{ "_id" : "Dog", "count" : 3 } { "_id" : "Cat", "count" : 2 } { "_id" : "Bat", "count" : 1 }
Ogni gruppo viene emesso nel proprio documento, composto da due campi:
- un
_id
campo contenente il valore di raggruppamento distinto e - un
count
campo contenente il numero di documenti appartenenti a quel raggruppamento.
I documenti sono ordinati per count
in ordine decrescente.