Совокупные запросы

Опубликовано: 23 Августа, 2022

MongoDB — это база данных модели документов NoSQL, которая в основном используется для анализа больших данных, таких как результаты опросов, рост отрасли за последние несколько лет и т. д. Для выполнения огромных вычислений в MongoDB мы используем агрегацию.

Агрегация группирует данные из нескольких документов и предоставляет суммированные результаты, среднее значение из большого набора результатов, минимальное/максимальное значение из большого набора результатов и т. д. В этой статье давайте посмотрим, как мы можем выполнить агрегацию с помощью Mongoose.

Установка модуля: Установите необходимый модуль с помощью следующей команды.

npm install mongoose

База данных: Ниже приведены примеры данных, представленные в коллекции в базе данных MongoDB.

Database Name: UserDB
Collection Name: UserValidation

На изображении ниже показано, что в нем существует документ. Отдельно взяты столбцы ssn и зарплата.

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

Структура проекта: Это будет выглядеть так.

Пример 1: Суммирование значений заработной платы.

Синтаксис: Поскольку мы суммируем поля, нам нужна операция группировки ($group), за которой следует суммирование ($sum), как показано ниже.

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

Имя файла: server.js

Javascript




// Requiring module
const mongoose = require("mongoose");
  
// Assumption is in our local, we have "UserDB" 
// named mongoDB database available
mongoose.connect(
    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();
        })
    });

Шаг для запуска программы: Запустите сервер с помощью следующей команды.

node server.js

Выход:

Пример 2: Расчет суммирования заработной платы сотрудников в зависимости от местоположения.

Синтаксис: Чтобы предоставить дополнительные условия фильтрации, мы можем использовать оператор $match.

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

Здесь мы сопоставляем столбец адреса только с Ченнаи . Следовательно, любые документы, совпадающие со значением адреса в Ченнаи , только суммируются.

Имя файла: server.js

Javascript




// Requiring module
const mongoose = require("mongoose");
  
// Assumption is in our local, we have
// "UserDB" named mongoDB database
// available
mongoose.connect(
    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();
        })
    });

Шаг для запуска программы: Запустите сервер с помощью следующей команды.

node server.js

Выход:

Пример 3: Чтобы получить среднее значение/минимальное значение/максимальное значение

Синтаксис: нам нужно использовать среднюю функциональность для средней / минимальной функциональности для минимальной / максимальной функциональности для максимальной, используя следующий синтаксис.

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

Имя файла: server.js

Javascript




// Requiring module
const mongoose = require("mongoose");
  
// Assumption is in our local, we have
// "UserDB" named mongoDB database 
// available
mongoose.connect(
    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();
    })
});

Шаг для запуска программы: Запустите сервер с помощью следующей команды.

node server.js

Выход:

Примечание. По умолчанию поле _id будет доступно для выходных документов. Мы можем использовать 1 для включения поля в выходной документ и 0 для подавления.

Заключение. Агрегированные запросы очень эффективны, и их функциональность аналогична SQL с точки зрения предложения group by (т. е. $group) и наличия функциональных возможностей (т. е. $match). MongoDB — очень мощная база данных NoSQL, типизированная документами, и агрегированные запросы играют в этом жизненно важную роль.

Ссылки: https://docs.mongodb.com/manual/aggregation/