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

MongoDB distinkt kommando

I MongoDB er distinct aggregeringskommando finder de forskellige værdier for et specificeret felt på tværs af en enkelt samling.

Det returnerer et dokument, der indeholder en række af de forskellige værdier, samt et indlejret dokument med forespørgselsstatistik og forespørgselsplanen.

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.

Der er også en db.collection.distinct() metode, som er en shell-indpakningsmetode 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 kommando for at returnere de forskellige kæledyrstyper.

Den distinct kommandoen accepterer samlingen som det første felt og nøglen som det andet. Nøglen er det felt, hvor der skal returneres forskellige værdier.

db.runCommand ( { distinct: "pets", key: "type" } )

Resultat:

{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }

I dette eksempel, selvom der er fire hunde og to katte i samlingen, indeholder arrayet kun én af hver. Den distinct kommandoen fjernede de duplikerede værdier.

Det originale dokument har kun én bat og så den distinct kommandoen æ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.runCommand ( { distinct: "products", key: "product.name" } )

Resultat:

{ "values" : [ "Cap", "Shirt", "Shoes", "Shorts" ], "ok" : 1 }

Vi kan gøre det samme for color felt.

db.runCommand ( { distinct: "products", key: "product.color" } )

Resultat:

{ "values" : [ "Brown", "Green", "Purple", "White" ], "ok" : 1 }

Få forskellige værdier fra et array

Sådan bruger du distinct kommando for at få de forskellige værdier fra ovenstående array.

db.runCommand ( { distinct: "products", key: "sizes" } )

Resultat:

{ "values" : [ "L", "M", "S", "XL", "XS" ], "ok" : 1 }

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 nøglen.

Eksempel:

db.runCommand ( { 
    distinct: "products", 
    key: "product.name", 
    query: { "sizes": "S" } 
    } )

Resultat:

{ "values" : [ "Shirt", "Shoes", "Shorts" ], "ok" : 1 }

Flere oplysninger

Den distinct kommandoen accepterer også andre felter, såsom comment , readConcern , og collation (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. Geografisk distribuerede MongoDB-klynger på AWS i EU-regionen

  2. VersionError:Ingen matchende dokument fundet fejl på Node.js/Mongoose

  3. Spor MongoDB ydeevne?

  4. Hvordan kan jeg implementere tilladelser på feltniveau til MongoDB?