MongoDB Distinct Aggregation
- MongoDB Distinct Aggregation
-
Verwenden Sie die
distinct()
-Methode, um unterschiedliche Werte in MongoDB zu finden -
Verwenden Sie den Befehl
distinct
, um unterschiedliche Werte in MongoDB zu finden -
Verwenden Sie den Aggregationsoperator
$group
, um eindeutige Werte in MongoDB zu finden
Dieser Artikel befasst sich mit der unterschiedlichen Aggregation von MongoDB. In diesem Tutorial lernen wir verschiedene Ansätze kennen, mit denen wir basierend auf den Projektanforderungen eindeutige/unterscheidbare Werte finden können.
MongoDB Distinct Aggregation
Wir müssen über eine gefüllte Sammlung verfügen, um die eindeutige Aggregation von MongoDB zu lernen. Dafür haben wir eine Sammlung namens collection
mit Beispieldaten erstellt, die Sie verwenden können.
Beispielcode:
// MongoDB version 5.0.8
//insert documents
> db.collection.insertMany([
{ "_id": 1, "state": "punjab", "city": "lahore", "zipcode" : 94608 },
{ "_id": 2, "state": "punjab", "city": "lahore", "zipcode" : 94608 },
{ "_id": 3, "state": "punjab", "city": "lahore", "zipcode" : 99559 },
{ "_id": 4, "state": "punjab", "city": "lahore", "zipcode" : 99559 },
{ "_id": 5, "state": "punjab", "city": "karachi", "zipcode" : 99523 },
{ "_id": 6, "state": "punjab", "city": "karachi", "zipcode" : 94608 },
{ "_id": 7, "state": "punjab", "city": "karachi", "zipcode" : 99559 },
{ "_id": 8, "state": "punjab", "city": "karachi", "zipcode" : 99545 },
{ "_id": 9, "state": "punjab", "city": "multan", "zipcode" : 99545 },
{ "_id": 10, "state": "punjab", "city": "multan", "zipcode" : 94608 },
{ "_id": 11, "state": "punjab", "city": "multan", "zipcode" : 99559 },
{ "_id": 12, "state": "punjab", "city": "multan", "zipcode" : 99559 }
]);
Sie können auch den folgenden Befehl ausführen, um sich die eingefügten Daten anzusehen.
// MongoDB version 5.0.8
//display documents
> db.collection.find();
Verwenden Sie die distinct()
-Methode, um unterschiedliche Werte in MongoDB zu finden
Beispielcode 1:
// MongoDB version 5.0.8
// return the distinct values for the `zipcode` field across the collection
> db.collection.distinct( "zipcode");
AUSGANG:
[ 94608, 99523, 99545, 99559 ]
Beispielcode 2:
// MongoDB version 5.0.8
// returns unique `city` names where the `zipcode` is either 99559 or 99545 or both.
> db.collection.distinct( "city", {"zipcode": { $in: [99559,99545]}} );
AUSGANG:
[ "karachi", "lahore", "multan" ]
Beispielcode 3:
// MongoDB version 5.0.8
// use the `.length` property to obtain the size/length of the retrieved unique values
> db.collection.distinct( "city", {"zipcode": { $in: [99559,99545]}} ).length;
AUSGANG:
3
Die Methode distinct()
extrahiert die unterschiedlichen Werte für das angegebene Feld über eine Sammlung oder Ansicht hinweg und gibt die Ausgabe in einem Array zurück.
Es benötigt mindestens einen Parameter und geht bis zu drei, wobei der erste, zweite und dritte Parameter jeweils field
, query
und options
sind.
Der field
-Parameter ist der field
-Name, für den wir eindeutige (unterscheidbare) Werte zurückgeben sollten. Die query
gibt die Dokumente an, aus denen wir die eindeutigen Werte erhalten müssen.
Während der Parameter options
optional ist, handelt es sich um ein Dokument, das die Optionen
spezifiziert. Wer diese Methode anwendet, muss folgende Punkte beachten:
- Die
db.collection.distinct()
stellt den Wrapper um einendistinct
-Befehl bereit, den wir im nächsten Abschnitt behandeln werden. - Wenn der Wert des angegebenen Felds ein Array ist, betrachtet
db.collection.distinct()
jedes Element eines Arrays als separaten Wert. Wenn das Feld beispielsweise seinen Wert als[2, [2], 2]
enthält, dann nimmtdb.collection.distinct()
2
,[2]
und2
als getrennte Werte.
Verwenden Sie den Befehl distinct
, um unterschiedliche Werte in MongoDB zu finden
Beispielcode:
// MongoDB version 5.0.8
// find distinct values
> db.runCommand ( { distinct: "collection", key: "zipcode" } );
AUSGANG:
{ "values" : [ 94608, 99523, 99545, 99559 ], "ok" : 1 }
In diesem Code haben wir den Aggregationsbefehl distinct
verwendet, der alle unterschiedlichen Werte für das angegebene Feld in einer Sammlung findet. Als Ergebnis gibt es ein Dokument mit einem Array unterschiedlicher Werte zurück.
Es hat auch ein eingebettetes Dokument mit dem Abfrageplan und den Abfragestatistiken.
Verwenden Sie den Aggregationsoperator $group
, um eindeutige Werte in MongoDB zu finden
Beispielcode:
// MongoDB version 5.0.8
// find size of distinct values for each `city`
> db.collection.aggregate([
{
$group:{
"_id": "$city",
"unique_count": {
$addToSet: "$zipcode"
}
}
},
{
$project:{
"distinct_zipcodes":{
$size: "$unique_count"
}
}
}
]);
AUSGANG:
{ "_id" : "karachi", "distinct_zipcodes" : 4 }
{ "_id" : "lahore", "distinct_zipcodes" : 2 }
{ "_id" : "multan", "distinct_zipcodes" : 3 }
Dieses Codebeispiel gibt den eindeutigen Wert des Felds zipcode
für jede city
zurück. Lesen Sie die folgenden Punkte, um zu verstehen, was im Code vor sich geht.
- Das
$addToSet
fügt dem Array so lange Werte hinzu, bis der Wert bereits existiert. Die Aggregation$addToSet
gibt ein Array zurück, das alle eindeutigen Werte enthält, die wir in der Variablenunique_count
speichern. - Wir machen die
Stadt
-Namen zu_id
und verwenden den Aggregationsoperator$group
, um sie mit_id
undunique_count
zu gruppieren. - Als nächstes verwenden wir
$project
, um die Aufnahme/Unterdrückung des Felds festzulegen, ein neues Feld hinzuzufügen und den Wert eines bestehenden Felds zurückzusetzen. Hier verwenden wir$size
, um die Größe des Arrays mit dem Namen$unique_count
zu ermitteln und in der Variabledistinct_zipcodes
zu speichern, die weiter auf dem Bildschirm neben dem Feld_id
angezeigt wird (siehe die oben angegebene Ausgabe).