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

Commande distincte MongoDB

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.