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

Comando distinto MongoDB

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.