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

MongoDB eindeutiger Befehl

In MongoDB ist das distinct Der Aggregationsbefehl findet die unterschiedlichen Werte für ein angegebenes Feld in einer einzelnen Sammlung.

Es gibt ein Dokument zurück, das ein Array der unterschiedlichen Werte enthält, sowie ein eingebettetes Dokument mit Abfragestatistiken und dem Abfrageplan.

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.

Es gibt auch ein db.collection.distinct() -Methode, die eine Shell-Wrapper-Methode für distinct ist 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 den distinct verwenden Befehl, um die unterschiedlichen Pet-Typen zurückzugeben.

Der distinct Der Befehl akzeptiert die Sammlung als erstes Feld und den Schlüssel als zweites. Der Schlüssel ist das Feld, für das eindeutige Werte zurückgegeben werden sollen.

db.runCommand ( { distinct: "pets", key: "type" } )

Ergebnis:

{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }

Obwohl es in diesem Beispiel vier Hunde und zwei Katzen in der Sammlung gibt, enthält das Array nur jeweils eine. Der distinct Der Befehl hat die doppelten Werte entfernt.

Das Originaldokument hat nur einen Fledermaus und somit den distinct Der Befehl ä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.runCommand ( { distinct: "products", key: "product.name" } )

Ergebnis:

{ "values" : [ "Cap", "Shirt", "Shoes", "Shorts" ], "ok" : 1 }

Wir können dasselbe für die color tun Feld.

db.runCommand ( { distinct: "products", key: "product.color" } )

Ergebnis:

{ "values" : [ "Brown", "Green", "Purple", "White" ], "ok" : 1 }

Eindeutige Werte aus einem Array erhalten

So verwenden Sie distinct Befehl, um die unterschiedlichen Werte aus dem obigen Array zu erhalten.

db.runCommand ( { distinct: "products", key: "sizes" } )

Ergebnis:

{ "values" : [ "L", "M", "S", "XL", "XS" ], "ok" : 1 }

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 Schlüssel hinzu.

Beispiel:

db.runCommand ( { 
    distinct: "products", 
    key: "product.name", 
    query: { "sizes": "S" } 
    } )

Ergebnis:

{ "values" : [ "Shirt", "Shoes", "Shorts" ], "ok" : 1 }

Weitere Informationen

Der distinct Der Befehl akzeptiert auch andere Felder wie comment , readConcern und collation (womit Sie sprachspezifische Regeln für den Zeichenfolgenvergleich festlegen können, z. B. Regeln für Groß- und Kleinschreibung und Akzentzeichen).

Weitere Informationen finden Sie in der MongoDB-Dokumentation.