MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB eindeutig ()

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.