Группировка документов по полю
Первым шагом в агрегации данных часто является группировка документов на основе общего поля. На этом шаге вы подключитесь к оболочке MongoDB (MongoDB shell), создадите новую базу данных и коллекцию, а затем используете оператор $group для группировки документов по категориям.
Сначала откройте оболочку MongoDB, выполнив следующую команду в вашем терминале:
mongosh
Оказавшись внутри оболочки, вы увидите приглашение test>. Давайте переключимся на новую базу данных под названием salesdb и вставим некоторые примеры данных о продуктах. MongoDB автоматически создаст базу данных и коллекцию при первой вставке в них данных.
Скопируйте и вставьте следующие команды в оболочку mongosh:
use salesdb
db.products.insertMany([
{ category: "Electronics", brand: "Apple", price: 1200 },
{ category: "Electronics", brand: "Samsung", price: 800 },
{ category: "Electronics", brand: "Sony", price: 950 },
{ category: "Apparel", brand: "Nike", price: 150 },
{ category: "Apparel", brand: "Adidas", price: 120 },
{ category: "Books", brand: "Penguin", price: 25 },
{ category: "Books", brand: "Penguin", price: 35 }
]);
Теперь, когда у вас есть данные, вы можете выполнить агрегацию. Следующая команда группирует документы по полю category и вычисляет общую цену для каждой категории с использованием аккумулятора $sum.
db.products.aggregate([
{
$group: {
_id: "$category",
totalPrice: { $sum: "$price" }
}
}
]);
Пример вывода:
[
{ "_id": "Books", "totalPrice": 60 },
{ "_id": "Apparel", "totalPrice": 270 },
{ "_id": "Electronics", "totalPrice": 2950 }
]
Давайте разберем этап агрегации:
db.products.aggregate([...]): Это метод, используемый для выполнения агрегации. Он принимает массив этапов, формирующих конвейер (pipeline).
$group: Это оператор этапа, который группирует входные документы.
_id: "$category": Это выражение определяет ключ для группировки. Здесь мы группируем по значению поля category. Префикс $ указывает на путь к полю.
totalPrice: { $sum: "$price" }: Это аккумулятор (accumulator). Он определяет новое поле в выходном документе под названием totalPrice. Оператор $sum вычисляет сумму поля price для всех документов в группе.