sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB distinct()

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.


  1. java.lang.IncompatibleClassChangeError:Implementerar klass Mongo

  2. En lista över index i MongoDB?

  3. Aggregat ramverk kan inte använda index

  4. Hantera Mongoose-valideringsfel – var och hur?