Dans MongoDB, le distinct
La commande d'agrégation trouve les valeurs distinctes d'un champ spécifié dans une seule collection.
Il renvoie un document qui contient un tableau des valeurs distinctes, ainsi qu'un document intégré avec les statistiques de requête et le plan de requête.
Les valeurs distinctes sont celles dont les doublons redondants ont été supprimés. Des valeurs distinctes sont des valeurs uniques. Par exemple, si vous avez 2 ou 3 documents avec la même valeur, le distinct
La commande renverra une seule valeur.
Il y a aussi un db.collection.distinct()
méthode, qui est une méthode shell wrapper pour le distinct
commande.
Exemple
Supposons que nous ayons une collection appelée pets
avec les documents suivants.
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 } { "_id" : 6, "name" : "Fetch", "type" : "Dog", "weight" : 17 } { "_id" : 7, "name" : "Jake", "type" : "Dog", "weight" : 30 }
Nous pouvons utiliser le distinct
commande pour renvoyer les types d'animaux distincts.
Le distinct
La commande accepte la collection comme premier champ et la clé comme second. La clé est le champ pour lequel renvoyer des valeurs distinctes.
db.runCommand ( { distinct: "pets", key: "type" } )
Résultat :
{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }
Dans cet exemple, même s'il y a quatre chiens et deux chats dans la collection, le tableau n'en contient qu'un de chaque. Le distinct
La commande a supprimé les valeurs en double.
Le document original n'a qu'une seule chauve-souris et donc le distinct
La commande ne change rien à cela - il n'y avait pas de valeurs en double à dédupliquer.
Documents intégrés
Vous pouvez utiliser la notation par points pour obtenir des valeurs distinctes à partir d'un champ intégré
Supposons que nous ayons une collection appelée products
qui contient les documents suivants :
{ "_id" : 1, "product" : { "name" : "Shirt", "color" : "White" }, "sizes" : [ "S", "M", "L" ] } { "_id" : 2, "product" : { "name" : "Shirt", "color" : "Green" }, "sizes" : [ "S", "M", "XL" ] } { "_id" : 3, "product" : { "name" : "Shirt", "color" : "White" }, "sizes" : [ "S", "M", "L" ] } { "_id" : 4, "product" : { "name" : "Shorts", "color" : "Green" }, "sizes" : [ "M", "XS" ] } { "_id" : 5, "product" : { "name" : "Shorts", "color" : "Brown" }, "sizes" : [ "S", "M" ] } { "_id" : 6, "product" : { "name" : "Cap", "color" : "Purple" }, "sizes" : [ "M" ] } { "_id" : 7, "product" : { "name" : "Shoes", "color" : "Brown" }, "sizes" : [ "S", "M", "L" ] } { "_id" : 8, "product" : { "name" : "Shirt", "color" : "White" }, "sizes" : [ "M", "L", "XL" ] } { "_id" : 9, "product" : { "name" : "Cap", "color" : "Green" }, "sizes" : [ "M", "L" ] }
Nous pouvons utiliser la requête suivante pour renvoyer des valeurs distinctes pour les noms de produits.
db.runCommand ( { distinct: "products", key: "product.name" } )
Résultat :
{ "values" : [ "Cap", "Shirt", "Shoes", "Shorts" ], "ok" : 1 }
On peut faire la même chose pour la color
champ.
db.runCommand ( { distinct: "products", key: "product.color" } )
Résultat :
{ "values" : [ "Brown", "Green", "Purple", "White" ], "ok" : 1 }
Obtenir des valeurs distinctes à partir d'un tableau
Voici comment utiliser le distinct
commande pour obtenir les valeurs distinctes du tableau ci-dessus.
db.runCommand ( { distinct: "products", key: "sizes" } )
Résultat :
{ "values" : [ "L", "M", "S", "XL", "XS" ], "ok" : 1 }
Utilisez distinct
avec une requête
Vous pouvez fournir une requête pour spécifier les documents à partir desquels récupérer les valeurs distinctes. Pour ce faire, ajoutez la requête après la clé.
Exemple :
db.runCommand ( {
distinct: "products",
key: "product.name",
query: { "sizes": "S" }
} )
Résultat :
{ "values" : [ "Shirt", "Shoes", "Shorts" ], "ok" : 1 }
Plus d'informations
Le distinct
La commande accepte également d'autres champs, tels que comment
, readConcern
, et collation
(ce qui vous permet de spécifier des règles spécifiques à la langue pour la comparaison de chaînes, telles que des règles pour la casse des lettres et les accents).
Consultez la documentation MongoDB pour plus d'informations.