sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB distinkt kommando

I MongoDB är distinct aggregeringskommandot hittar de distinkta värdena för ett specificerat fält över en enda samling.

Den returnerar ett dokument som innehåller en uppsättning av de distinkta värdena, samt ett inbäddat dokument med frågestatistik och frågeplanen.

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.

Det finns också en db.collection.distinct() metod, som ä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 kommando för att returnera de distinkta husdjurstyperna.

Den distinct kommandot accepterar samlingen som det första fältet och nyckeln som det andra. Nyckeln är fältet för vilket distinkta värden ska returneras.

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

Resultat:

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

I det här exemplet, även om det finns fyra hundar och två katter i samlingen, innehåller arrayen bara en av varje. Den distinct kommandot tog bort dubblettvärdena.

Originaldokumentet har bara en bat och så den distinct kommandot ändrar inte 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.runCommand ( { distinct: "products", key: "product.name" } )

Resultat:

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

Vi kan göra samma sak för color fältet.

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

Resultat:

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

Hämta distinkta värden från en matris

Så här använder du distinct kommando för att få de distinkta värdena från ovanstående array.

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

Resultat:

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

Använd distinct med en fråga

Du kan ge 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 nyckeln.

Exempel:

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

Resultat:

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

Mer information

Den distinct kommandot accepterar även andra fält, såsom comment , readConcern och collation (vilket 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. MongoServer.State-motsvarighet i 2.0-drivrutinen

  2. Max försök har överskridits Undantagskö laravel

  3. MongoError:Alternativet 'markör' krävs, förutom för aggregering med förklara-argumentet

  4. MongoDB $log