In MongoDB, il distinct
Il comando aggregation trova i valori distinti per un campo specificato in una singola raccolta.
Restituisce un documento che contiene una matrice di valori distinti, nonché un documento incorporato con le statistiche della query e il piano della query.
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.
C'è anche un db.collection.distinct()
metodo, che è un metodo wrapper della shell 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 il distinct
comando per restituire i diversi tipi di animali domestici.
Il distinct
il comando accetta la raccolta come primo campo e la chiave come secondo. La chiave è il campo per il quale restituire valori distinti.
db.runCommand ( { distinct: "pets", key: "type" } )
Risultato:
{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }
In questo esempio, anche se nella raccolta sono presenti quattro cani e due gatti, l'array ne contiene solo uno. Il distinct
il comando ha rimosso i valori duplicati.
Il documento originale ha solo una bat e quindi il distinct
il comando 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.runCommand ( { distinct: "products", key: "product.name" } )
Risultato:
{ "values" : [ "Cap", "Shirt", "Shoes", "Shorts" ], "ok" : 1 }
Possiamo fare la stessa cosa per il color
campo.
db.runCommand ( { distinct: "products", key: "product.color" } )
Risultato:
{ "values" : [ "Brown", "Green", "Purple", "White" ], "ok" : 1 }
Ottieni valori distinti da un array
Ecco come utilizzare il distinct
comando per ottenere i valori distinti dall'array sopra.
db.runCommand ( { distinct: "products", key: "sizes" } )
Risultato:
{ "values" : [ "L", "M", "S", "XL", "XS" ], "ok" : 1 }
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 la chiave.
Esempio:
db.runCommand ( {
distinct: "products",
key: "product.name",
query: { "sizes": "S" }
} )
Risultato:
{ "values" : [ "Shirt", "Shoes", "Shorts" ], "ok" : 1 }
Maggiori informazioni
Il distinct
comando accetta anche altri campi, come comment
, readConcern
e collation
(che consente di specificare regole specifiche per la lingua per il confronto delle stringhe, come regole per lettere maiuscole e accenti).
Consulta la documentazione di MongoDB per ulteriori informazioni.