sql >> Databasteknik >  >> NoSQL >> MongoDB

3 sätt att returnera distinkta värden i MongoDB

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.


  1. Hur man konverterar sträng till objectId i LocalField för $lookup Mongodb

  2. DynamoDB vs MongoDB NoSQL

  3. Gå igenom alla Mongo-samlingar och kör en fråga

  4. Hur infogar man om det inte finns annars uppdaterar man med mongoengine?