I valori distinti sono quei valori con duplicati ridondanti rimossi. In altre parole, valori distinti sono valori unici.
In MongoDB ci sono alcuni modi in cui possiamo restituire valori distinti in una query. Questo articolo presenta 3 modi per restituire valori distinti nella shell mongo.
Dati di esempio
Gli esempi in questa pagina utilizzano la seguente raccolta chiamata pets
:
{ "_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 }
Il distinct()
Metodo
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.
Esempio:
db.pets.distinct( "type" )
Risultato:
[ "Bat", "Cat", "Dog" ]
Questi tre valori sono i valori distinti per il type
campo nei documenti sopra.
Gli pets
part nomina semplicemente la raccolta da cui restituire i valori distinti.
Il db.collection.distinct()
method è un metodo wrapper della shell per il distinct
comando (sotto).
Il distinct
Comando
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.
db.runCommand ( { distinct: "pets", key: "type" } )
Risultato:
{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }
Possiamo vedere che vengono restituiti gli stessi valori distinti, tranne che questa volta si trovano in un documento che contiene anche le altre informazioni.
Il $group
Operatore di aggregazione
A seconda delle tue esigenze, puoi anche utilizzare il $group
operatore di aggregazione per restituire valori distinti.
Esempio:
db.pets.aggregate( [ { $group : { _id : "$type" } } ] )
Risultato:
{ "_id" : "Cat" } { "_id" : "Bat" } { "_id" : "Dog" }
In questo caso i valori distinti vengono restituiti in documenti separati.
Questo approccio potrebbe essere utile se ti aspetti che i risultati siano grandi. Se i risultati sono maggiori della dimensione massima di BSON (16 megabyte al momento della scrittura), potrebbe essere necessario utilizzare questo approccio.