MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

7 façons de compter les documents dans MongoDB

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 pour countDocuments() et estimatedDocumentCount() . 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.