Agrégation distincte MongoDB

Mehvish Ashiq 30 janvier 2023
  1. Agrégation distincte MongoDB
  2. Utilisez la méthode distinct() pour trouver des valeurs distinctes dans MongoDB
  3. Utilisez la commande distinct pour trouver des valeurs distinctes dans MongoDB
  4. Utilisez l’opérateur d’agrégation $group pour trouver des valeurs distinctes dans MongoDB
Agrégation distincte MongoDB

Cet article parle de l’agrégation distincte de MongoDB. Dans ce didacticiel, nous apprendrons différentes approches que nous pouvons utiliser pour trouver des valeurs uniques/distinctes en fonction des exigences du projet.

Agrégation distincte MongoDB

Nous devons avoir une collection peuplée pour apprendre l’agrégation distincte MongoDB. Pour cela, nous avons créé une collection nommée collection avec des exemples de données que vous pouvez utiliser.

Exemple de code :

// MongoDB version 5.0.8

//insert documents
> db.collection.insertMany([
    { "_id": 1, "state": "punjab", "city": "lahore", "zipcode" : 94608 },
    { "_id": 2, "state": "punjab", "city": "lahore", "zipcode" : 94608 },
    { "_id": 3, "state": "punjab", "city": "lahore", "zipcode" : 99559 },
    { "_id": 4, "state": "punjab", "city": "lahore", "zipcode" : 99559 },

    { "_id": 5, "state": "punjab", "city": "karachi", "zipcode" : 99523 },
    { "_id": 6, "state": "punjab", "city": "karachi", "zipcode" : 94608 },
    { "_id": 7, "state": "punjab", "city": "karachi", "zipcode" : 99559 },
    { "_id": 8, "state": "punjab", "city": "karachi", "zipcode" : 99545 },

    { "_id": 9, "state": "punjab", "city": "multan", "zipcode" : 99545 },
    { "_id": 10, "state": "punjab", "city": "multan", "zipcode" : 94608 },
    { "_id": 11, "state": "punjab", "city": "multan", "zipcode" : 99559 },
    { "_id": 12, "state": "punjab", "city": "multan", "zipcode" : 99559 }
]);

Vous pouvez également exécuter la commande suivante pour consulter les données insérées.

// MongoDB version 5.0.8

//display documents
> db.collection.find();

Utilisez la méthode distinct() pour trouver des valeurs distinctes dans MongoDB

Exemple de code 1 :

// MongoDB version 5.0.8

// return the distinct values for the `zipcode` field across the collection
> db.collection.distinct( "zipcode");

PRODUCTION:

[ 94608, 99523, 99545, 99559 ]

Exemple de code 2 :

// MongoDB version 5.0.8

// returns unique `city` names where the `zipcode` is either 99559 or 99545 or both.
> db.collection.distinct( "city", {"zipcode": { $in: [99559,99545]}} );

PRODUCTION:

[ "karachi", "lahore", "multan" ]

Exemple de code 3 :

// MongoDB version 5.0.8

// use the `.length` property to obtain the size/length of the retrieved unique values
> db.collection.distinct( "city", {"zipcode": { $in: [99559,99545]}} ).length;

PRODUCTION:

3

La méthode distinct() extrait les valeurs distinctes pour le champ spécifié dans une collection ou une vue et renvoie la sortie dans un tableau.

Il prend au moins un paramètre et va jusqu’à trois, où les premier, deuxième et troisième paramètres sont respectivement field, query et options.

Le paramètre field est le nom du field pour lequel nous devons retourner des valeurs uniques (distinctes). Le paramètre query indique les documents à partir desquels nous devons obtenir les valeurs distinctes.

Alors que le paramètre options est facultatif, il s’agit d’un document qui spécifie les options. Celui qui utilise cette méthode doit avoir à l’esprit les points suivants :

  1. La db.collection.distinct() fournit le wrapper autour d’une commande distinct que nous aborderons dans la section suivante.
  2. Si la valeur du champ spécifié est un tableau, alors db.collection.distinct() considérera chaque élément d’un tableau comme une valeur distincte. Par exemple, si le champ contient sa valeur comme [2, [2], 2], alors le db.collection.distinct() prendra 2, [2], et 2 comme valeurs distinctes.

Utilisez la commande distinct pour trouver des valeurs distinctes dans MongoDB

Exemple de code :

// MongoDB version 5.0.8

// find distinct values
> db.runCommand ( { distinct: "collection", key: "zipcode" } );

PRODUCTION:

{ "values" : [ 94608, 99523, 99545, 99559 ], "ok" : 1 }

Dans ce code, nous avons utilisé la commande d’agrégation distinct qui trouve toutes les valeurs distinctes pour le champ spécifié dans une collection. En conséquence, il renvoie un document avec un tableau de valeurs distinctes.

Il a également un document intégré avec le plan de requête et les statistiques de requête.

Utilisez l’opérateur d’agrégation $group pour trouver des valeurs distinctes dans MongoDB

Exemple de code :

// MongoDB version 5.0.8

// find size of distinct values for each `city`
> db.collection.aggregate([
    {
        $group:{
            "_id": "$city",
            "unique_count": {
                $addToSet: "$zipcode"
             }
        }
    },
    {
        $project:{
            "distinct_zipcodes":{
                $size: "$unique_count"
             }
        }
    }
]);

PRODUCTION:

{ "_id" : "karachi", "distinct_zipcodes" : 4 }
{ "_id" : "lahore", "distinct_zipcodes" : 2 }
{ "_id" : "multan", "distinct_zipcodes" : 3 }

Cet exemple de code renvoie la valeur distincte du champ zipcode pour chaque city. Lisez les points suivants pour comprendre ce qui se passe dans le code.

  1. Le $addToSet continue d’ajouter des valeurs au tableau jusqu’à ce que la valeur existe déjà. L’agrégation $addToSet renvoie un tableau contenant toutes les valeurs uniques que nous enregistrons dans la variable unique_count.
  2. Nous transformons les noms de ville en _id et utilisons l’opérateur d’agrégation $group pour les regrouper à l’aide de _id et unique_count.
  3. Ensuite, nous utilisons $project pour spécifier l’inclusion/suppression du champ, en ajoutant un nouveau champ et en réinitialisant la valeur d’un champ existant. Ici, nous utilisons $size pour trouver la taille du tableau nommé $unique_count et l’enregistrons dans la variable distinct_zipcodes qui est ensuite affichée à l’écran à côté du champ _id (voir la sortie donnée ci-dessus) .
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook