Agrégation distincte MongoDB
- Agrégation distincte MongoDB
-
Utilisez la méthode
distinct()
pour trouver des valeurs distinctes dans MongoDB -
Utilisez la commande
distinct
pour trouver des valeurs distinctes dans MongoDB -
Utilisez l’opérateur d’agrégation
$group
pour 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 commandedistinct
que 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]
, et2
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.
- 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 variableunique_count
. - Nous transformons les noms de
ville
en_id
et utilisons l’opérateur d’agrégation$group
pour les regrouper à l’aide de_id
etunique_count
. - 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 variabledistinct_zipcodes
qui est ensuite affichée à l’écran à côté du champ_id
(voir la sortie donnée ci-dessus) .