Agregación distinta de MongoDB
- Agregación distinta de MongoDB
-
Use el método
distinct()
para encontrar valores distintos en MongoDB -
Use el comando
distinct
para encontrar valores distintos en MongoDB -
Use el operador de agregación
$group
para encontrar valores distintos en 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:
- El
db.collection.distinct()
proporciona el envoltorio alrededor de un comandodistinct
que cubriremos en la siguiente sección. - 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]
, entoncesdb.collection.distinct()
tomará2
,[2]
y2
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.
- 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 variableunique_count
. - Hacemos los nombres de las
ciudades
como_id
y usamos el operador de agregación$group
para agruparlos usando_id
yunique_count
. - 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 variabledistinct_zipcodes
que se muestra en la pantalla junto al campo_id
(ver el resultado anterior).