Agregación distinta de MongoDB

Mehvish Ashiq 30 enero 2023
  1. Agregación distinta de MongoDB
  2. Use el método distinct() para encontrar valores distintos en MongoDB
  3. Use el comando distinct para encontrar valores distintos en MongoDB
  4. Use el operador de agregación $group para encontrar valores distintos en MongoDB
Agregación distinta de MongoDB

Este artículo habla sobre la agregación distinta de MongoDB. En este tutorial, aprenderemos diferentes enfoques que podemos usar para encontrar valores únicos/distintos según los requisitos del proyecto.

Agregación distinta de MongoDB

Debemos tener una colección poblada para aprender la agregación distinta de MongoDB. Para eso, hemos creado una colección llamada collection con datos de muestra que puede usar.

Código de ejemplo:

// 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 }
]);

También puede ejecutar el siguiente comando para ver los datos insertados.

// MongoDB version 5.0.8

//display documents
> db.collection.find();

Use el método distinct() para encontrar valores distintos en MongoDB

Código de ejemplo 1:

// MongoDB version 5.0.8

// return the distinct values for the `zipcode` field across the collection
> db.collection.distinct( "zipcode");

Producción :

[ 94608, 99523, 99545, 99559 ]

Código de ejemplo 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]}} );

Producción :

[ "karachi", "lahore", "multan" ]

Código de ejemplo 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;

Producción :

3

El método distinct() extrae los distintos valores para el campo especificado en una colección o vista y devuelve el resultado en un array.

Toma al menos un parámetro y sube a tres, donde el primer, segundo y tercer parámetro son field, query y options, respectivamente.

El parámetro field es el nombre del field para el que debemos devolver valores únicos (distintos). El parámetro query indica los documentos de los que debemos obtener los valores distintos.

Si bien el parámetro options es opcional, es un documento que especifica las options. Quien utilice este método debe tener en cuenta los siguientes puntos:

  1. El db.collection.distinct() proporciona el envoltorio alrededor de un comando distinct que cubriremos en la siguiente sección.
  2. Si el valor del campo especificado es un array, entonces db.collection.distinct() considerará cada elemento de un array como un valor separado. Por ejemplo, si el campo contiene su valor como [2, [2], 2], entonces db.collection.distinct() tomará 2, [2] y 2 como valores separados.

Use el comando distinct para encontrar valores distintos en MongoDB

Código de ejemplo:

// MongoDB version 5.0.8

// find distinct values
> db.runCommand ( { distinct: "collection", key: "zipcode" } );

Producción :

{ "values" : [ 94608, 99523, 99545, 99559 ], "ok" : 1 }

En este código, usamos el comando de agregación distinct que encuentra todos los valores distintos para el campo especificado en una colección. Como resultado, devuelve un documento con un array de valores distintos.

También tiene un documento incrustado con el plan de consulta y las estadísticas de consulta.

Use el operador de agregación $group para encontrar valores distintos en MongoDB

Código de ejemplo:

// 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"
             }
        }
    }
]);

Producción :

{ "_id" : "karachi", "distinct_zipcodes" : 4 }
{ "_id" : "lahore", "distinct_zipcodes" : 2 }
{ "_id" : "multan", "distinct_zipcodes" : 3 }

Este ejemplo de código devuelve el valor distinto del campo zipcode para cada city. Lea los siguientes puntos para entender lo que está pasando en el código.

  1. El $addToSet sigue agregando valores a la matriz hasta que el valor ya existe. La agregación $addToSet devuelve un array que contiene todos los valores únicos que guardamos en la variable unique_count.
  2. Hacemos los nombres de las ciudades como _id y usamos el operador de agregación $group para agruparlos usando _id y unique_count.
  3. A continuación, usamos $project para especificar la inclusión/supresión del campo, agregando un nuevo campo y restableciendo el valor de un campo existente. Aquí, usamos $size para encontrar el tamaño de la matriz llamada $unique_count y guardarlo en la variable distinct_zipcodes que se muestra en la pantalla junto al campo _id (ver el resultado anterior).
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