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.