Agrégation distincte MongoDB
- Agrégation distincte MongoDB
-
Utilisez la méthode
distinct()pour trouver des valeurs distinctes dans MongoDB -
Utilisez la commande
distinctpour trouver des valeurs distinctes dans MongoDB -
Utilisez l’opérateur d’agrégation
$grouppour trouver des valeurs distinctes dans 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 :
- La
db.collection.distinct()fournit le wrapper autour d’une commandedistinctque nous aborderons dans la section suivante. - 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 ledb.collection.distinct()prendra2,[2], et2comme 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.
- Le
$addToSetcontinue d’ajouter des valeurs au tableau jusqu’à ce que la valeur existe déjà. L’agrégation$addToSetrenvoie un tableau contenant toutes les valeurs uniques que nous enregistrons dans la variableunique_count. - Nous transformons les noms de
villeen_idet utilisons l’opérateur d’agrégation$grouppour les regrouper à l’aide de_idetunique_count. - Ensuite, nous utilisons
$projectpour 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$sizepour trouver la taille du tableau nommé$unique_countet l’enregistrons dans la variabledistinct_zipcodesqui est ensuite affichée à l’écran à côté du champ_id(voir la sortie donnée ci-dessus) .
