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ń.
Odrębne wartości to te, w których usunięto nadmiarowe duplikaty. Wartości odrębne są wartościami unikalnymi. Na przykład, jeśli masz 2 lub 3 dokumenty o tej samej wartości, distinct
polecenie zwróci tylko jedną wartość.
Jest też db.collection.distinct()
metoda, która jest metodą opakowującą powłoki dla distinct
polecenie.
Przykład
Załóżmy, że mamy kolekcję o nazwie pets
z następującymi dokumentami.
{ "_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 }
Możemy użyć distinct
polecenie, aby zwrócić różne typy zwierząt.
distinct
polecenie akceptuje kolekcję jako pierwsze pole, a klucz jako drugie. Klucz to pole, dla którego zwracane są odrębne wartości.
db.runCommand ( { distinct: "pets", key: "type" } )
Wynik:
{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }
W tym przykładzie, mimo że w kolekcji są cztery psy i dwa koty, tablica zawiera tylko po jednym z nich. distinct
polecenie usunęło zduplikowane wartości.
Oryginalny dokument ma tylko jeden bat, więc distinct
polecenie nie zmienia tego – nie było zduplikowanych wartości do deduplikacji.
Osadzone dokumenty
Możesz użyć notacji kropkowej, aby uzyskać różne wartości z osadzonego pola
Załóżmy, że mamy kolekcję o nazwie products
który zawiera następujące dokumenty:
{ "_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" ] }
Możemy użyć następującego zapytania, aby zwrócić różne wartości nazw produktów.
db.runCommand ( { distinct: "products", key: "product.name" } )
Wynik:
{ "values" : [ "Cap", "Shirt", "Shoes", "Shorts" ], "ok" : 1 }
Możemy zrobić to samo dla color
pole.
db.runCommand ( { distinct: "products", key: "product.color" } )
Wynik:
{ "values" : [ "Brown", "Green", "Purple", "White" ], "ok" : 1 }
Uzyskaj odrębne wartości z tablicy
Oto jak używać distinct
polecenie, aby uzyskać różne wartości z powyższej tablicy.
db.runCommand ( { distinct: "products", key: "sizes" } )
Wynik:
{ "values" : [ "L", "M", "S", "XL", "XS" ], "ok" : 1 }
Użyj distinct
z zapytaniem
Możesz podać zapytanie, aby określić dokumenty, z których mają być pobierane różne wartości. Aby to zrobić, dodaj zapytanie po kluczu.
Przykład:
db.runCommand ( {
distinct: "products",
key: "product.name",
query: { "sizes": "S" }
} )
Wynik:
{ "values" : [ "Shirt", "Shoes", "Shorts" ], "ok" : 1 }
Więcej informacji
distinct
polecenie akceptuje również inne pola, takie jak comment
, readConcern
i collation
(co pozwala określić specyficzne dla języka reguły porównywania ciągów, takie jak reguły dotyczące wielkości liter i znaków akcentu).
Więcej informacji znajdziesz w dokumentacji MongoDB.