Consultas agregadas

MongoDB es una base de datos de modelos de documentos NoSQL y se utiliza principalmente en el análisis de Big Data, como los resultados de las encuestas electorales, el crecimiento de una industria en los últimos años, etc. Para realizar grandes cálculos, en MongoDB utilizamos la agregación. 

La agregación agrupa los datos de múltiples documentos y proporciona los resultados resumidos, el valor promedio de un gran conjunto de resultados, el valor mínimo/máximo de un gran conjunto de resultados, etc. En este artículo, veamos cómo podemos realizar la agregación usando Mongoose.

Instalación del módulo: Instale el módulo requerido usando el siguiente comando.

npm install mongoose

Base de datos: a continuación se muestran los datos de muestra presentes en una colección en la base de datos MongoDB.

Database Name: UserDB
Collection Name: UserValidation

La siguiente imagen muestra que la existencia del documento en ella. Específicamente tomado ssn y columnas de salario solo.

db.UserValidation.find({},{_id:0,salary:1,ssn:1,firstName:1});

Existencia de datos en la colección “UserValidation”

Estructura del proyecto: Se verá así.

Ejemplo 1: Sumatoria de los valores de los salarios.

Sintaxis: Como estamos sumando los campos, necesitamos una operación de agrupación ($grupo) seguida de una suma ($sum) como se muestra a continuación.

db.UserValidation.aggregate([  
 {  
   $group: {
     _id: null,  
     salarycount: {
       $sum: "$salary"
     }
   }
 }
]); 

Nombre de archivo: servidor.js

Javascript

// Requiring module
const mongoose = require("mongoose");
  
// Assumption is in our local, we have "UserDB" 
// named mongoDB database available
mongoose.connect(
    "mongodb://localhost:27017/UserDB",
    function (err, db) {
  
        console.log("Connected correctly to server");
  
        // "UserValidation" named collection 
        // available and each document contains
        // "salary" named column
        var col = db.collection('UserValidation');
  
        // By applying aggregate functionality,
        // finding the summation of salary and 
        // the result is in "summedUpDocument"
        col.aggregate([{
            $group:
                { _id: null, total: { $sum: '$salary' } }
        }]).toArray(function (err, summedUpDocument) {
  
            // Summed up salary value can be printed
            // as like below
            console.log(summedUpDocument[0].total)
            db.close();
        })
    });

Paso para ejecutar el programa: Ejecute el servidor usando el siguiente comando.

node server.js

Producción:

Ejemplo 2: Calcular la suma de los salarios de los empleados basada en la ubicación.

Sintaxis: para proporcionar condiciones de filtro adicionales, podemos usar el operador $match.

db.UserValidation.aggregate([
{  
  $match: {
    address: {
      $eq: "Chennai"
    }
  }
},        
{  
  $group: {
    _id: null,  
    salarycount: {
      $sum: "$salary"
    }
  }
}]);  

Aquí estamos haciendo coincidir la columna de dirección para tener solo Chennai . Por lo tanto, los documentos que coincidan con el valor de la dirección de Chennai solo se resumen. 

Nombre de archivo: servidor.js 

Javascript

// Requiring module
const mongoose = require("mongoose");
  
// Assumption is in our local, we have
// "UserDB" named mongoDB database
// available
mongoose.connect(
    "mongodb://localhost:27017/UserDB",
    function (err, db) {
  
        console.log("Connected correctly to server");
  
        // "UserValidation" named collection 
        // available and each document contains
        // "salary" named column
        var col = db.collection('UserValidation');
  
        // By applying aggregate functionality, 
        // finding the summation of salary 
        // Here applied match condition where 
        // matching address equal to 
        // Chennai and result will be in 
        // summedUpDocumentForChennai
        col.aggregate([
            { $match: { address: { $eq: "Chennai" } } },
            {
                $group:
                    { _id: null, total: { $sum: '$salary' } }
            }
        ]).toArray(function (err, summedUpDocumentForChennai) {
  
            // Summed up salary value can be printed
            // as like below
            console.log(summedUpDocumentForChennai[0].total)
            db.close();
        })
    });

Paso para ejecutar el programa: Ejecute el servidor usando el siguiente comando.

node server.js

Producción:

Ejemplo 3: Para obtener el valor promedio/valor mínimo/valor máximo

Sintaxis: Necesitamos usar la funcionalidad avg para la funcionalidad promedio/mínima para la funcionalidad mínima/máxima para la máxima usando la siguiente sintaxis.

db.UserValidation.aggregate([{
    $match: { address: { $eq: "Chennai" } }
    },
    {
        $group: {
            _id: null,
            totalSalary: { $sum: "$salary" },
            averageSalary: { $avg: "$salary" },
            minimumSalary: { $min: "$salary" },
            maximumSalary: { $max: "$salary" }
        }
    }
])

Nombre de archivo: servidor.js 

Javascript

// Requiring module
const mongoose = require("mongoose");
  
// Assumption is in our local, we have
// "UserDB" named mongoDB database 
// available
mongoose.connect(
    "mongodb://localhost:27017/UserDB", 
    function (err, db) {
  
    console.log("Connected correctly to server");
  
    // "UserValidation" named collection
    // available and each document contains
    // "salary" named column
    var col = db.collection('UserValidation');
  
    // By applying aggregate functionality,
    // finding the summation of salary 
    // Here applied match condition where
    // matching address equal to Chennai 
    // We are calculating total, average,
    // minimum and maximum amount
    col.aggregate([
        { $match: { address: { $eq: "Chennai" } } },
        {
            $group:
            {
                _id: null, totalSalary: { $sum: "$salary" },
                averageSalary: { $avg: "$salary" },
                minimumSalary: { $min: "$salary" },
                maximumSalary: { $max: "$salary" }
            }
        }
    ]).toArray(function (err, projectFunctionality) {
        console.log("Total Salary  ..", 
            projectFunctionality[0].totalSalary)
  
        console.log("Average  Salary  ..", 
            projectFunctionality[0].averageSalary)
  
        console.log("Minimum Salary  ..", 
            projectFunctionality[0].minimumSalary)
  
        console.log("Maximum  Salary  ..", 
            projectFunctionality[0].maximumSalary)
        db.close();
    })
});

Paso para ejecutar el programa: Ejecute el servidor usando el siguiente comando.

node server.js

Producción:

Nota: De forma predeterminada, el campo _id estará disponible para los documentos de salida. Podemos usar 1 para incluir un campo en el documento de salida y 0 para suprimir.

Conclusión: las consultas agregadas son muy poderosas y su funcionalidad es similar a SQL en términos de cláusula group by (es decir, $group) y funciones (es decir, $match). MongoDB es una base de datos tipo documentum NoSQL mucho más poderosa y las consultas agregadas juegan un papel vital en eso.

Referencias: https://docs.mongodb.com/manual/aggregation/

Publicación traducida automáticamente

Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *