I MongoDB, db.collection.distinct()
metod hittar de distinkta värdena för ett specificerat fält över en enda samling eller vy och returnerar resultaten i en array.
Distinkta värden är de med borttagna redundanta dubbletter. Distinkta värden är unika värden. Om du till exempel har 2 eller 3 dokument med samma värde, visas distinct
kommandot returnerar bara ett värde.
db.collection.distinct()
är en skalinpackningsmetod för distinct
kommando.
Exempel
Anta att vi har en samling som heter pets
med följande dokument.
{ "_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 använda distinct()
metod för att returnera de distinkta husdjurstyperna.
db.pets.distinct( "type" )
Resultat:
[ "Bat", "Cat", "Dog" ]
Så även om det finns fyra hundar och två katter, innehåller arrayen bara en av varje. distinct()
metod tog bort dubblettvärdena.
Originaldokumentet har bara en bat och så distinct()
metoden ändrar inte på det – det fanns inga dubbletter av värden att dedupera.
Inbäddade dokument
Du kan använda punktnotation för att få distinkta värden från ett inbäddat fält
Anta att vi har en samling som heter products
som innehåller följande dokument:
{ "_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 använda följande fråga för att returnera distinkta värden för produktnamnen.
db.products.distinct(
"product.name"
)
Resultat:
[ "Cap", "Shirt", "Shoes", "Shorts" ]
Vi skulle kunna göra samma sak för color
fältet.
db.products.distinct(
"product.color"
)
Resultat:
[ "Brown", "Green", "Purple", "White" ]
Hämta distinkta värden från en matris
Så här använder du distinct()
metod för att få de distinkta värdena från ovanstående array.
db.products.distinct( "sizes" )
Resultat:
[ "L", "M", "S", "XL", "XS" ]
Använd distinct()
med en fråga
Du kan tillhandahålla en fråga för att ange de dokument från vilka de distinkta värdena ska hämtas. För att göra detta, lägg till frågan efter fältet.
Exempel:
db.products.distinct( "product.name", { sizes: "S" } )
Resultat:
[ "Shirt", "Shoes", "Shorts" ]
Mer information
db.collection.distinct()
metoden accepterar också en collation
parameter, som låter dig ange språkspecifika regler för strängjämförelse, såsom regler för skiftläge och accenttecken.
Se MongoDB-dokumentationen för mer information.