In MongoDB die db.collection.distinct()
findet die unterschiedlichen Werte für ein bestimmtes Feld in einer einzelnen Sammlung oder Ansicht und gibt die Ergebnisse in einem Array zurück.
Eindeutige Werte sind diejenigen, bei denen redundante Duplikate entfernt wurden. Eindeutige Werte sind eindeutige Werte. Wenn Sie beispielsweise 2 oder 3 Dokumente mit demselben Wert haben, wird der distinct
Befehl gibt nur einen Wert zurück.
db.collection.distinct()
ist eine Shell-Wrapper-Methode für distinct
Befehl.
Beispiel
Angenommen, wir haben eine Sammlung namens pets
mit den folgenden Dokumenten.
{ "_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 }
Wir können distinct()
verwenden -Methode, um die unterschiedlichen Pet-Typen zurückzugeben.
db.pets.distinct( "type" )
Ergebnis:
[ "Bat", "Cat", "Dog" ]
Obwohl also vier Hunde und zwei Katzen vorhanden sind, enthält das Array nur jeweils eine. Das distinct()
-Methode die doppelten Werte entfernt.
Das Originaldokument hat nur einen Fledermaus und damit den distinct()
-Methode ändert daran nichts – es gab keine doppelten Werte zum Deduplizieren.
Eingebettete Dokumente
Sie können die Punktnotation verwenden, um eindeutige Werte aus einem eingebetteten Feld zu erhalten
Angenommen, wir haben eine Sammlung namens products
die folgende Dokumente enthält:
{ "_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" ] }
Wir können die folgende Abfrage verwenden, um eindeutige Werte für die Produktnamen zurückzugeben.
db.products.distinct(
"product.name"
)
Ergebnis:
[ "Cap", "Shirt", "Shoes", "Shorts" ]
Wir könnten dasselbe für color
tun Feld.
db.products.distinct(
"product.color"
)
Ergebnis:
[ "Brown", "Green", "Purple", "White" ]
Eindeutige Werte aus einem Array erhalten
So verwenden Sie distinct()
Methode, um die unterschiedlichen Werte aus dem obigen Array zu erhalten.
db.products.distinct( "sizes" )
Ergebnis:
[ "L", "M", "S", "XL", "XS" ]
Verwenden Sie distinct()
mit einer Abfrage
Sie können eine Abfrage bereitstellen, um die Dokumente anzugeben, aus denen die unterschiedlichen Werte abgerufen werden sollen. Fügen Sie dazu die Abfrage nach dem Feld hinzu.
Beispiel:
db.products.distinct( "product.name", { sizes: "S" } )
Ergebnis:
[ "Shirt", "Shoes", "Shorts" ]
Weitere Informationen
Die db.collection.distinct()
-Methode akzeptiert auch eine collation
-Parameter, mit dem Sie sprachspezifische Regeln für den Zeichenfolgenvergleich angeben können, z. B. Regeln für Groß- und Kleinschreibung und Akzentzeichen.
Weitere Informationen finden Sie in der MongoDB-Dokumentation.