In MongoDB is de db.collection.distinct()
methode vindt de afzonderlijke waarden voor een opgegeven veld in een enkele verzameling of weergave en retourneert de resultaten in een array.
Onderscheidende waarden zijn die waarbij overtollige duplicaten zijn verwijderd. Verschillende waarden zijn unieke waarden. Als u bijvoorbeeld 2 of 3 documenten met dezelfde waarde heeft, wordt de distinct
commando retourneert slechts één waarde.
db.collection.distinct()
is een shell-wrappermethode voor de distinct
commando.
Voorbeeld
Stel dat we een verzameling hebben met de naam pets
met de volgende documenten.
{ "_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 }
We kunnen de distinct()
. gebruiken methode om de verschillende soorten huisdieren te retourneren.
db.pets.distinct( "type" )
Resultaat:
[ "Bat", "Cat", "Dog" ]
Dus ook al zijn er vier honden en twee katten, de array bevat er maar één van elk. De distinct()
methode verwijderde de dubbele waarden.
Het originele document heeft slechts één bat en dus de distinct()
methode verandert daar niets aan – er waren geen dubbele waarden om te ontdubbelen.
Ingesloten documenten
U kunt puntnotatie gebruiken om verschillende waarden uit een ingesloten veld te halen
Stel dat we een verzameling hebben met de naam products
die de volgende documenten bevat:
{ "_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" ] }
We kunnen de volgende query gebruiken om verschillende waarden voor de productnamen te retourneren.
db.products.distinct(
"product.name"
)
Resultaat:
[ "Cap", "Shirt", "Shoes", "Shorts" ]
We zouden hetzelfde kunnen doen voor de color
veld.
db.products.distinct(
"product.color"
)
Resultaat:
[ "Brown", "Green", "Purple", "White" ]
Haal verschillende waarden uit een array
Zo gebruikt u de distinct()
methode om de verschillende waarden uit de bovenstaande array te halen.
db.products.distinct( "sizes" )
Resultaat:
[ "L", "M", "S", "XL", "XS" ]
Gebruik distinct()
met een zoekopdracht
U kunt een query opgeven om de documenten op te geven waaruit de afzonderlijke waarden moeten worden opgehaald. Voeg hiervoor de query toe na het veld.
Voorbeeld:
db.products.distinct( "product.name", { sizes: "S" } )
Resultaat:
[ "Shirt", "Shoes", "Shorts" ]
Meer informatie
De db.collection.distinct()
methode accepteert ook een collation
parameter, waarmee u taalspecifieke regels kunt opgeven voor het vergelijken van tekenreeksen, zoals regels voor hoofdletters en accenttekens.
Zie de MongoDB-documentatie voor meer informatie.