I MongoDB er db.collection.distinct()
metoden finder de distinkte værdier for et specificeret felt på tværs af en enkelt samling eller visning og returnerer resultaterne i en matrix.
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.
db.collection.distinct()
er en shell wrapper-metode 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()
metode til at returnere de forskellige kæledyrstyper.
db.pets.distinct( "type" )
Resultat:
[ "Bat", "Cat", "Dog" ]
Så selvom der er fire hunde og to katte, indeholder arrayet kun én af hver. distinct()
metode fjernede de duplikerede værdier.
Det originale dokument har kun én bat og derfor distinct()
metoden æ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.products.distinct(
"product.name"
)
Resultat:
[ "Cap", "Shirt", "Shoes", "Shorts" ]
Vi kunne gøre det samme for color
felt.
db.products.distinct(
"product.color"
)
Resultat:
[ "Brown", "Green", "Purple", "White" ]
Få forskellige værdier fra et array
Sådan bruger du distinct()
metode til at få de forskellige værdier fra ovenstående array.
db.products.distinct( "sizes" )
Resultat:
[ "L", "M", "S", "XL", "XS" ]
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 feltet.
Eksempel:
db.products.distinct( "product.name", { sizes: "S" } )
Resultat:
[ "Shirt", "Shoes", "Shorts" ]
Flere oplysninger
db.collection.distinct()
metode accepterer også en collation
parameter, 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.