Wartości odrębne to wartości z usuniętymi nadmiarowymi duplikatami. Innymi słowy, wartości odrębne są wartościami unikalnymi.
W MongoDB istnieje kilka sposobów na zwrócenie różnych wartości w zapytaniu. W tym artykule przedstawiono 3 sposoby zwracania różnych wartości w powłoce mongo.
Przykładowe dane
W przykładach na tej stronie użyto następującej kolekcji o nazwie 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 }
distinct()
Metoda
W MongoDB db.collection.distinct()
Metoda znajduje różne wartości dla określonego pola w pojedynczej kolekcji lub widoku i zwraca wyniki w postaci tablicy.
Przykład:
db.pets.distinct( "type" )
Wynik:
[ "Bat", "Cat", "Dog" ]
Te trzy wartości to odrębne wartości dla type
w powyższych dokumentach.
pets
część po prostu nazywa kolekcję, z której mają zostać zwrócone odrębne wartości.
db.collection.distinct()
method jest metodą opakowującą powłoki dla distinct
polecenie (poniżej).
distinct
Polecenie
W MongoDB distinct
Polecenie agregacji znajduje różne wartości dla określonego pola w jednej kolekcji.
Zwraca dokument zawierający tablicę różnych wartości, a także osadzony dokument ze statystykami zapytań i planem zapytań.
db.runCommand ( { distinct: "pets", key: "type" } )
Wynik:
{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }
Widzimy, że zwracane są te same odrębne wartości, ale tym razem znajdują się one w dokumencie, który zawiera również inne informacje.
$group
Operator agregacji
W zależności od potrzeb możesz również skorzystać z grupy $group
operator agregacji do zwracania odrębnych wartości.
Przykład:
db.pets.aggregate( [ { $group : { _id : "$type" } } ] )
Wynik:
{ "_id" : "Cat" } { "_id" : "Bat" } { "_id" : "Dog" }
W takim przypadku odrębne wartości są zwracane w osobnych dokumentach.
Takie podejście może być przydatne, jeśli spodziewasz się dużych wyników. Jeśli Twoje wyniki są większe niż maksymalny rozmiar BSON (16 megabajtów w momencie pisania), może być konieczne zastosowanie tego podejścia.