MongoDB Distinct Aggregation

Mehvish Ashiq 12 Juli 2022
  1. MongoDB Distinct Aggregation
  2. Verwenden Sie die distinct()-Methode, um unterschiedliche Werte in MongoDB zu finden
  3. Verwenden Sie den Befehl distinct, um unterschiedliche Werte in MongoDB zu finden
  4. Verwenden Sie den Aggregationsoperator $group, um eindeutige Werte in MongoDB zu finden
MongoDB Distinct Aggregation

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:

  1. Die db.collection.distinct() stellt den Wrapper um einen distinct-Befehl bereit, den wir im nächsten Abschnitt behandeln werden.
  2. 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 nimmt db.collection.distinct() 2, [2] und 2 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.

  1. 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 Variablen unique_count speichern.
  2. Wir machen die Stadt-Namen zu _id und verwenden den Aggregationsoperator $group, um sie mit _id und unique_count zu gruppieren.
  3. 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 Variable distinct_zipcodes zu speichern, die weiter auf dem Bildschirm neben dem Feld _id angezeigt wird (siehe die oben angegebene Ausgabe).
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook