I MongoDB er distinct
aggregeringskommando finder de forskellige værdier for et specificeret felt på tværs af en enkelt samling.
Det returnerer et dokument, der indeholder en række af de forskellige værdier, samt et indlejret dokument med forespørgselsstatistik og forespørgselsplanen.
Distinkte værdier er dem, hvor redundante dubletter er fjernet. Distinkte værdier er unikke værdier. Hvis du f.eks. har 2 eller 3 dokumenter med samme værdi, er distinct
kommando vil kun returnere én værdi.
Der er også en db.collection.distinct()
metode, som er en shell-indpakningsmetode for distinct
kommando.
Eksempel
Antag, at vi har en samling kaldet pets
med følgende dokumenter.
{ "_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 }
Vi kan bruge distinct
kommando for at returnere de forskellige kæledyrstyper.
Den distinct
kommandoen accepterer samlingen som det første felt og nøglen som det andet. Nøglen er det felt, hvor der skal returneres forskellige værdier.
db.runCommand ( { distinct: "pets", key: "type" } )
Resultat:
{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }
I dette eksempel, selvom der er fire hunde og to katte i samlingen, indeholder arrayet kun én af hver. Den distinct
kommandoen fjernede de duplikerede værdier.
Det originale dokument har kun én bat og så den distinct
kommandoen ændrer ikke på det – der var ingen duplikerede værdier at dedupere.
Indlejrede dokumenter
Du kan bruge punktnotation til at få forskellige værdier fra et indlejret felt
Antag, at vi har en samling kaldet products
der indeholder følgende dokumenter:
{ "_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" ] }
Vi kan bruge følgende forespørgsel til at returnere forskellige værdier for produktnavnene.
db.runCommand ( { distinct: "products", key: "product.name" } )
Resultat:
{ "values" : [ "Cap", "Shirt", "Shoes", "Shorts" ], "ok" : 1 }
Vi kan gøre det samme for color
felt.
db.runCommand ( { distinct: "products", key: "product.color" } )
Resultat:
{ "values" : [ "Brown", "Green", "Purple", "White" ], "ok" : 1 }
Få forskellige værdier fra et array
Sådan bruger du distinct
kommando for at få de forskellige værdier fra ovenstående array.
db.runCommand ( { distinct: "products", key: "sizes" } )
Resultat:
{ "values" : [ "L", "M", "S", "XL", "XS" ], "ok" : 1 }
Brug distinct
med en forespørgsel
Du kan angive en forespørgsel for at angive de dokumenter, hvorfra de forskellige værdier skal hentes. For at gøre dette skal du tilføje forespørgslen efter nøglen.
Eksempel:
db.runCommand ( {
distinct: "products",
key: "product.name",
query: { "sizes": "S" }
} )
Resultat:
{ "values" : [ "Shirt", "Shoes", "Shorts" ], "ok" : 1 }
Flere oplysninger
Den distinct
kommandoen accepterer også andre felter, såsom comment
, readConcern
, og collation
(som giver dig mulighed for at angive sprogspecifikke regler for strengsammenligning, såsom regler for store og små bogstaver og accenttegn).
Se MongoDB-dokumentationen for mere information.