Distinkta värden är de värden med borttagna redundanta dubbletter. Med andra ord är distinkta värden unika värden.
I MongoDB finns det några sätt vi kan returnera distinkta värden i en fråga. Den här artikeln presenterar tre sätt att returnera distinkta värden i mongoskalet.
Exempeldata
Exemplen på den här sidan använder följande samling som heter pets
:
{ "_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 }
Den distinct()
Metod
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.
Exempel:
db.pets.distinct( "type" )
Resultat:
[ "Bat", "Cat", "Dog" ]
Dessa tre värden är de distinkta värdena för type
fältet i ovanstående dokument.
pets
del namnger helt enkelt den samling som de distinkta värdena ska returneras från.
db.collection.distinct()
metod är en skalinpackningsmetod för distinct
kommando (nedan).
Den distinct
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.
db.runCommand ( { distinct: "pets", key: "type" } )
Resultat:
{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }
Vi kan se att samma distinkta värden returneras, förutom att den här gången finns i ett dokument som också innehåller den andra informationen.
$group
Aggregationsoperatör
Beroende på dina behov kan du också använda $group
aggregeringsoperator för att returnera distinkta värden.
Exempel:
db.pets.aggregate( [ { $group : { _id : "$type" } } ] )
Resultat:
{ "_id" : "Cat" } { "_id" : "Bat" } { "_id" : "Dog" }
I det här fallet returneras de distinkta värdena i separata dokument.
Detta tillvägagångssätt kan vara användbart om du förväntar dig att dina resultat ska bli stora. Om dina resultat är större än den maximala BSON-storleken (16 megabyte i skrivande stund) kan du behöva använda detta tillvägagångssätt.