Подсчет элементов в группах
В этом шаге мы исследуем различные способы подсчета элементов внутри групп с использованием агрегирующего фреймворка MongoDB. Подсчет является фундаментальной операцией, которая помогает понять распределение ваших данных.
Продолжим работать с нашей базой данных salesdb
:
// Ensure we're in the correct database
use salesdb
Сначала добавим больше продуктов, чтобы сделать наш подсчет более интересным:
db.products.insertMany([
{ category: "Electronics", brand: "Apple" },
{ category: "Electronics", brand: "Samsung" },
{ category: "Clothing", brand: "Nike" },
{ category: "Clothing", brand: "Adidas" },
{ category: "Books", brand: "Penguin" },
{ category: "Books", brand: "Oxford" }
]);
Теперь подсчитаем элементы различными способами:
- Подсчитайте количество продуктов в каждой категории:
db.products.aggregate([
{
$group: {
_id: "$category",
productCount: { $sum: 1 }
}
}
]);
- Подсчитайте уникальные бренды внутри каждой категории:
db.products.aggregate([
{
$group: {
_id: "$category",
uniqueBrands: { $addToSet: "$brand" }
}
}
]);
- Подсчитайте количество уникальных брендов и общее количество продуктов:
db.products.aggregate([
{
$group: {
_id: "$category",
totalProducts: { $sum: 1 },
uniqueBrands: { $addToSet: "$brand" },
brandCount: { $addToSet: "$brand" }
}
},
{
$project: {
totalProducts: 1,
uniqueBrandCount: { $size: "$uniqueBrands" }
}
}
]);
Пример вывода
[
{
_id: 'Electronics',
totalProducts: 4,
uniqueBrandCount: 2
},
{
_id: 'Clothing',
totalProducts: 4,
uniqueBrandCount: 2
},
{
_id: 'Books',
totalProducts: 4,
uniqueBrandCount: 2
}
]
Пояснение основных операторов агрегации:
$sum: 1
: Считает общее количество документов в каждой группе
$addToSet
: Создает массив уникальных значений
$size
: Считает количество элементов в массиве