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

MongoDB distinto()

In MongoDB, il db.collection.distinct() trova i valori distinti per un campo specificato in una singola raccolta o vista e restituisce i risultati in una matrice.

I valori distinti sono quelli con duplicati ridondanti rimossi. I valori distinti sono valori unici. Ad esempio, se hai 2 o 3 documenti con lo stesso valore, il distinct il comando restituirà un solo valore.

db.collection.distinct() è un metodo di shell wrapper per il distinct comando.

Esempio

Supponiamo di avere una collezione chiamata pets con i seguenti documenti.

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

Possiamo usare distinct() metodo per restituire i diversi tipi di animali domestici.

db.pets.distinct( "type" )

Risultato:

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

Quindi, anche se ci sono quattro cani e due gatti, l'array ne contiene solo uno per ciascuno. Il distinct() metodo ha rimosso i valori duplicati.

Il documento originale ha solo una bat e quindi distinct() il metodo non lo cambia:non c'erano valori duplicati da deduplicare.

Documenti incorporati

Puoi utilizzare la notazione del punto per ottenere valori distinti da un campo incorporato

Supponiamo di avere una collezione chiamata products che contiene i seguenti documenti:

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

Possiamo utilizzare la seguente query per restituire valori distinti per i nomi dei prodotti.

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

Risultato:

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

Potremmo fare la stessa cosa per il color campo.

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

Risultato:

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

Ottieni valori distinti da un array

Ecco come usare distinct() metodo per ottenere i valori distinti dall'array sopra.

db.products.distinct( "sizes" )

Risultato:

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

Usa distinct() con una query

È possibile fornire una query per specificare i documenti da cui recuperare i valori distinti. Per fare ciò, aggiungi la query dopo il campo.

Esempio:

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

Risultato:

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

Maggiori informazioni

Il db.collection.distinct() accetta anche un collation parametro, che consente di specificare le regole specifiche della lingua per il confronto delle stringhe, come le regole per le lettere maiuscole e gli accenti.

Consulta la documentazione di MongoDB per ulteriori informazioni.