sql >> Database >  >> NoSQL >> MongoDB

MongoDB onderscheiden()

In MongoDB is de db.collection.distinct() methode vindt de afzonderlijke waarden voor een opgegeven veld in een enkele verzameling of weergave en retourneert de resultaten in een array.

Onderscheidende waarden zijn die waarbij overtollige duplicaten zijn verwijderd. Verschillende waarden zijn unieke waarden. Als u bijvoorbeeld 2 of 3 documenten met dezelfde waarde heeft, wordt de distinct commando retourneert slechts één waarde.

db.collection.distinct() is een shell-wrappermethode voor de distinct commando.

Voorbeeld

Stel dat we een verzameling hebben met de naam pets met de volgende documenten.

{ "_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 }

We kunnen de distinct() . gebruiken methode om de verschillende soorten huisdieren te retourneren.

db.pets.distinct( "type" )

Resultaat:

[ "Bat", "Cat", "Dog" ]

Dus ook al zijn er vier honden en twee katten, de array bevat er maar één van elk. De distinct() methode verwijderde de dubbele waarden.

Het originele document heeft slechts één bat en dus de distinct() methode verandert daar niets aan – er waren geen dubbele waarden om te ontdubbelen.

Ingesloten documenten

U kunt puntnotatie gebruiken om verschillende waarden uit een ingesloten veld te halen

Stel dat we een verzameling hebben met de naam products die de volgende documenten bevat:

{ "_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" ] }

We kunnen de volgende query gebruiken om verschillende waarden voor de productnamen te retourneren.

db.products.distinct(
    "product.name"
)

Resultaat:

[ "Cap", "Shirt", "Shoes", "Shorts" ]

We zouden hetzelfde kunnen doen voor de color veld.

db.products.distinct(
    "product.color"
)

Resultaat:

[ "Brown", "Green", "Purple", "White" ]

Haal verschillende waarden uit een array

Zo gebruikt u de distinct() methode om de verschillende waarden uit de bovenstaande array te halen.

db.products.distinct( "sizes" )

Resultaat:

[ "L", "M", "S", "XL", "XS" ]

Gebruik distinct() met een zoekopdracht

U kunt een query opgeven om de documenten op te geven waaruit de afzonderlijke waarden moeten worden opgehaald. Voeg hiervoor de query toe na het veld.

Voorbeeld:

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

Resultaat:

[ "Shirt", "Shoes", "Shorts" ]

Meer informatie

De db.collection.distinct() methode accepteert ook een collation parameter, waarmee u taalspecifieke regels kunt opgeven voor het vergelijken van tekenreeksen, zoals regels voor hoofdletters en accenttekens.

Zie de MongoDB-documentatie voor meer informatie.


  1. Grote objecten cachen met Redis-cache

  2. MongoDB Gegevensmap /data/db niet gevonden

  3. Mongodb sorteer binnenarray

  4. Redis-strings versus Redis-hashes om JSON weer te geven:efficiëntie?