Совокупные запросы
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/