MongoDB propose différentes méthodes pour compter les documents dans une collection ou une vue. Il existe également des opérateurs d'agrégation qui vous permettent de compter les documents entrants à partir d'une étape précédente du pipeline d'agrégation.
Cet article présente les manières suivantes de compter les documents dans le shell mongo :
- Le
count
commande - Le
db.collection.count()
méthode - Le
db.collection.countDocuments()
méthode - Le
db.collection.estimatedDocumentCount()
méthode - Le
cursor.count()
méthode - Le
$count
opérateur de pipeline d'agrégation - Le
$sortByCount
opérateur de pipeline d'agrégation
Le count
Commande
Le count
La commande compte le nombre de documents dans une collection ou une vue.
Exemple :
db.runCommand( {
count: "pets",
query: { type: "Dog" }
} )
Résultat :
{ "n" :4, "ok" :1 }
Dans cet exemple, nous pouvons voir qu'il y a quatre chiens dans le pets
collecte.
On peut aussi voir qu'il renvoie un document qui contient le décompte ainsi que le statut de la commande.
Le db.collection.count()
Méthode
Le db.collection.count()
La méthode renvoie le nombre de documents qui correspondraient à un find()
requête pour la collection ou la vue.
La collection
part est le nom de la collection ou de la vue sur laquelle effectuer l'opération de comptage.
Le db.collection.count()
method est une méthode wrapper pour le count
commande.
Exemple :
db.pets.count({
"type": "Dog"
})
Résultat :
4
Le db.collection.count()
la méthode ne renvoie pas un document comme le count
la commande le fait. Il renvoie simplement le compte.
Le countDocuments()
Méthode
Le db.collection.countDocuments()
renvoie le nombre de documents correspondant à la requête d'une collection ou d'une vue.
La collection
part est le nom de la collection ou de la vue sur laquelle effectuer l'opération de comptage.
Exemple :
db.pets.countDocuments({
"type": "Dog"
})
Résultat :
4
Fondamentalement, le même résultat que db.collection.count()
, bien qu'il soit recommandé d'utiliser countDocuments()
au lieu de count()
si possible.
La documentation MongoDB indique :
Les pilotes MongoDB compatibles avec les fonctionnalités 4.0 déprécient leur curseur et leur collection respectifs
count()
API en faveur de nouvelles API pourcountDocuments()
etestimatedDocumentCount()
. Pour les noms d'API spécifiques pour un pilote donné, consultez la documentation du pilote.
De plus, lorsqu'il est utilisé sans prédicat de requête, count()
s'appuie sur des métadonnées, ce qui peut donner lieu à un décompte approximatif. Le countDocuments()
d'autre part, ne s'appuie pas sur les métadonnées et renvoie un décompte précis en effectuant une agrégation des documents.
Le estimatedDocumentCount()
Méthode
Le db.collection.estimatedDocumentCount()
method est un wrapper pour le count
commande qui renvoie le nombre de tous les documents d'une collection ou d'une vue.
Exemple :
db.pets.estimatedDocumentCount()
Résultat :
7
Le db.collection.estimatedDocumentCount()
La méthode ne prend pas de filtre de requête. Il utilise à la place des métadonnées pour renvoyer le nombre de documents pour l'ensemble de la collection/vue.
Le cursor.count()
Méthode
Le cursor.count()
method est un wrapper pour le count
commande qui compte le nombre de documents référencés par un curseur..
Il n'exécute pas réellement la requête. Il compte et renvoie simplement le nombre de résultats qui seraient renvoyés par la requête.
Exemple :
db.pets.find({"type": "Dog"}).count()
Résultat :
4
Ceci est équivalent à db.collection.count()
exemple de méthode ci-dessus.
Comme cité ci-dessus, les pilotes MongoDB compatibles avec les fonctionnalités 4.0 déprécient leur curseur et leur collection respectifs count()
API en faveur de nouvelles API pour countDocuments()
et estimatedDocumentCount()
.
Le $count
Opérateur de pipeline d'agrégation
Le $count
l'opérateur d'agrégation transmet un document à l'étape suivante du pipeline d'agrégation qui contient un décompte du nombre de documents entrés à l'étape actuelle.
Exemple :
db.pets.aggregate([
{
$match: { type: "Dog" }
},
{
$count: "DogCount"
}
])
Résultat :
{ "DogCount" :4 }
Voici un autre exemple qui montre comment vous pouvez utiliser cet opérateur pour compter les résultats groupés.
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$group: { _id: "$type", count: { $sum: 1 } }
},
{
$sort : { count : -1, _id: 1 }
}
])
Résultat :
{ "_id" : "Dog", "count" : 3 }
{ "_id" : "Cat", "count" : 2 }
{ "_id" : "Bat", "count" : 1 }
Cette requête particulière peut être effectuée avec moins de code en utilisant le $sortByCount
opérateur de pipeline d'agrégation (ci-dessous).
Le $sortByCount
Opérateur de pipeline d'agrégation
Le $sortByCount
L'opérateur d'agrégation regroupe les documents entrants en fonction de la valeur d'une expression spécifiée, puis calcule le nombre de documents dans chaque groupe distinct.
Voici comment nous pouvons utiliser $sortByCount
pour obtenir le même résultat que l'exemple précédent :
db.pets.aggregate([
{
$match: { weight: { $lt: 30 } }
},
{
$sortByCount: "$type"
}
])
Résultat :
{ "_id" :"Chien", "count" :3 }{ "_id" :"Chat", "count" :2 }{ "_id" :"Chauve-souris", "count" :1 }Chaque groupe est édité dans son propre document, composé de deux champs :
- un
_id
champ contenant la valeur de regroupement distincte, et - un
count
champ contenant le nombre de documents appartenant à ce groupe.
Les documents sont triés par count
par ordre décroissant.