Агрегация группы MongoDB

Agregacia Gruppy Mongodb



Агрегация — это процедура извлечения данных из коллекции MongoDB. Он обрабатывает многочисленные документы и предоставляет оценочные результаты. Агрегация в MongoDB имеет несколько операторов и методов, выполняющих различные задачи. Среди этих операторов оператор $group группирует документы для каждой уникальной группы и упорядочивает их в соответствии с определенным выражением. Групповой оператор играет важную роль в MongoDB, поскольку он облегчает широкий спектр манипуляций с данными. Агрегация $group в примере MongoDB вместе с различными аккумуляторами представлена ​​ниже.

Как работает групповая агрегация в MongoDB?

Оператор $group следует использовать для группировки входных документов в соответствии с указанным выражением _id. Затем он должен вернуть один документ с общими значениями для каждой отдельной группы. Для начала реализации мы создали коллекцию «Книги» в MongoDB. После создания коллекции «Книги» мы вставили документы, связанные с различными полями. Документы вставляются в коллекцию с помощью метода insertMany(), поскольку выполняемый запрос показан ниже.

>db.Books.insertMany([

{
_идентификатор: 1,
название: «Анна Каренина»,
цена: 290,
год: 1879,
order_status: 'В наличии',
автор: {
'name':'Лев Толстой'
}
},
{
_идентификатор: 2,
Название: «Убить пересмешника»,
цена: 500,
год: 1960,
order_status: 'нет в наличии',
автор: {
'name':'Харпер Ли'
}
},
{
_идентификатор: 3,
Название: «Человек-невидимка»,
цена: 312,
год: 1953,
order_status: 'В наличии',
автор: {
'name':'Ральф Эллисон'
}
},
{
_ид: 4,
Название: «Любимая»,
цена: 370,
год:  1873,
order_status: 'out_of_stock',
автор: {
'name':'Тони Моррисон'
}
},
{
_идентификатор: 5,
Название: 'Вещи разваливаются',
цена: 200,
год: 1958,
order_status: 'В наличии',
автор: {
'name':'Чинуа Ачебе'
}
},
{
_ид: 6,
Название: 'Цвет лиловый',
цена: 510,
год: 1982,
order_status: 'нет в наличии',
автор: {
'name':'Элис Уокер'
}
}
])

Документы успешно сохраняются в коллекции «Книги» без каких-либо ошибок, поскольку вывод признается «истинным». Теперь мы собираемся использовать эти документы коллекции «Книги» для выполнения агрегации «$group».









Пример № 1: Использование агрегации $group



Здесь демонстрируется простое использование агрегации $group. Совокупный запрос сначала вводит оператор «$group», а затем оператор «$group» принимает выражения для создания сгруппированных документов.





>db.Books.aggregate([

{ $group:{ _id:'$author.name'} }

])

Приведенный выше запрос оператора $group указывается с полем «_id» для вычисления общих значений для всех входных документов. Затем поле «_id» выделяется с «$ author.name», который образует другую группу в поле «_id». Будут возвращены отдельные значения $author.name, поскольку мы не вычисляем какие-либо накопленные значения. Выполнение агрегированного запроса $group приводит к следующему результату. Поле _id имеет значения author.names.



Пример № 2: Использование агрегации $group с аккумулятором $push

В примере агрегации $group используется любой аккумулятор, который уже упоминался выше. Но мы можем использовать аккумуляторы в агрегации $group. Операторы-аккумуляторы — это те, которые используются в полях входного документа, кроме тех, которые «сгруппированы» под «_id». Предположим, что мы хотим поместить поля выражения в массив, тогда в операторе «$group» вызывается аккумулятор «$push». Пример поможет вам лучше понять аккумулятор «$push» группы «$group».

>db.Books.aggregate(

[

{ $group : { _id : '$_id', год: { $push: '$year' } } }

]

).Симпатичная();

Здесь мы хотим сгруппировать дату публикации данных книг в массиве. Для этого следует применить приведенный выше запрос. Запрос агрегации предоставляется с выражением, в котором оператор «$group» берет выражение поля «_id» и выражение поля «year», чтобы получить год группы с помощью накопителя $push. Выходные данные, полученные из этого конкретного запроса, создают массив полей года и сохраняют в нем возвращенный сгруппированный документ.

Пример № 3: Использование агрегации $group с аккумулятором «$min»

Затем у нас есть накопитель «$min», который используется в агрегации $group для получения минимального совпадающего значения из каждого документа в коллекции. Выражение запроса для аккумулятора $min приведено ниже.

>db.Books.aggregate([

{
$группа:{
_я бы:{
название: '$ title',
order_status: '$order_status'
},
minPrice:{$мин: '$цена'}
}
}
])

В запросе есть выражение агрегации «$group», в котором мы сгруппировали документ по полям «title» и «order_status». Затем мы предоставили накопитель $min, который группировал документы, получая минимальные значения цен из несгруппированных полей. Когда мы запускаем этот запрос аккумулятора $min ниже, он возвращает сгруппированные документы по заголовку и статусу заказа в последовательности. Минимальная цена отображается первой, а самая высокая цена документа размещается последней.

Пример № 4. Использование агрегации $group с аккумулятором $sum

Чтобы получить сумму всех числовых полей с помощью оператора $group, используется операция накопления $sum. Этот аккумулятор учитывает нечисловые значения в коллекциях. Кроме того, здесь мы используем агрегацию $match с агрегацией $group. Агрегация $match принимает условия запроса, указанные в документе, и передает сопоставленный документ в агрегацию $group, которая затем возвращает сумму документа для каждой группы. Для накопителя $sum запрос представлен ниже.

>db.Books.aggregate([

{$match:{статус_заказа:'На складе'}},

{ $group:{ _id:'$author.name', totalBooks: { $sum:1 } }

}])

Приведенный выше запрос агрегации начинается с оператора $match, который соответствует всем «order_status», статус которых «В наличии», и передается в $group в качестве входных данных. Затем оператор $group имеет накопительное выражение $sum, которое выводит сумму всех книг в запасе. Обратите внимание, что «$sum:1» добавляет 1 к каждому документу, принадлежащему к той же группе. Вывод здесь показал только два сгруппированных документа, которые имеют «статус_заказа», связанный с «На складе».

Пример № 5: Используйте агрегацию $group с агрегацией $sort

Оператор $group здесь используется с оператором «$sort», который используется для сортировки сгруппированных документов. Следующий запрос содержит три этапа операции сортировки. Сначала идет этап $match, затем этап $group и последний этап $sort, на котором сортируется сгруппированный документ.

>db.Books.aggregate([

{$match:{статус_заказа:'нет в наличии'}},

{ $group:{ _id:{ authorName :'$author.name'}, totalBooks: {$sum:1} } },

{ $ sort: { имя автора: 1}}

])

Здесь мы получили соответствующий документ, чей «статус_заказа» отсутствует на складе. Затем соответствующий документ вводится на этапе $group, который группирует документ с полем «authorName» и «totalBooks». Выражение $group связано с накопителем $sum для общего количества книг, которых нет в наличии. Затем сгруппированные документы сортируются с помощью выражения $sort в порядке возрастания, поскольку «1» здесь указывает порядок возрастания. Отсортированный групповой документ в указанном порядке получается в следующем выводе.

Пример № 6. Использование агрегации $group для уникальных значений

Процедура агрегирования также группирует документы по элементам с помощью оператора $group для извлечения отдельных значений элементов. Пусть у нас будет выражение запроса этого оператора в MongoDB.

>db.Books.aggregate([ { $group : { _id : '$title' } } ] ).pretty();

Запрос агрегации применяется к коллекции Books, чтобы получить уникальное значение группового документа. Здесь $group принимает выражение _id, которое выводит различные значения, поскольку мы ввели в него поле «заголовок». Вывод группового документа получается при выполнении этого запроса, который имеет группу имен заголовков в поле _id.

Заключение

Руководство направлено на то, чтобы прояснить концепцию оператора агрегации $group для группировки документа в базе данных MongoDB. Агрегатный подход MongoDB улучшает явления группировки. Структура синтаксиса оператора $group демонстрируется на примерах программ. В дополнение к основному примеру операторов $group мы также использовали этот оператор с некоторыми аккумуляторами, такими как $push, $min, $sum, и такими операторами, как $match и $sort.