sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB distinct()

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.


  1. Grundlæggende overvejelser for at tage en MongoDB-sikkerhedskopi

  2. mongoDB:$dateToString-format for at vise tid med 15 minutters interval

  3. Mongodb hotfix KB2731284

  4. Mongo hvordan man $lookup med DBRef