Генерировать отчеты
В этом финальном шаге вы научитесь генерировать более сложные отчеты с использованием агрегирующей платформы MongoDB. Мы объединим несколько этапов агрегации, чтобы создать информативные отчеты на основе нашей коллекции книг.
Сначала проверим нашу существующую коллекцию:
use bookstore
db.books.find()
- Полный отчет по инвентарию книг:
db.books.aggregate([
{
$project: {
title: 1,
totalValue: { $multiply: ["$price", "$quantity"] },
inventoryStatus: {
$switch: {
branches: [
{ case: { $lt: ["$quantity", 30] }, then: "Low Stock" },
{ case: { $gte: ["$quantity", 30] }, then: "In Stock" }
]
}
}
}
},
{
$sort: { totalValue: -1 }
}
]);
Пример вывода:
[
{
_id: ObjectId("..."),
title: "Python Basics",
totalValue: 1499.50,
inventoryStatus: "In Stock"
},
...
]
- Отчет о распределении ценовых диапазонов:
db.books.aggregate([
{
$bucket: {
groupBy: "$price",
boundaries: [0, 35, 45, 100],
default: "Other",
output: {
count: { $sum: 1 },
titles: { $push: "$title" }
}
}
}
]);
Пример вывода:
[
{
_id: 0,
count: 2,
titles: ["Python Basics", "Web Development"]
},
{
_id: 35,
count: 1,
titles: ["MongoDB Essentials"]
},
...
]
- Подробный отчет о производительности продаж:
db.books.aggregate([
{
$group: {
_id: {
priceCategory: {
$switch: {
branches: [
{ case: { $lt: ["$price", 35] }, then: "Budget" },
{ case: { $gte: ["$price", 35] }, then: "Premium" }
]
}
}
},
totalBooks: { $sum: 1 },
totalQuantity: { $sum: "$quantity" },
totalValue: { $sum: { $multiply: ["$price", "$quantity"] } },
avgPrice: { $avg: "$price" }
}
},
{
$project: {
_id: 0,
priceCategory: "$_id.priceCategory",
totalBooks: 1,
totalQuantity: 1,
totalValue: { $round: ["$totalValue", 2] },
avgPrice: { $round: ["$avgPrice", 2] }
}
}
]);
Пример вывода:
[
{
priceCategory: "Budget",
totalBooks: 2,
totalQuantity: 90,
totalValue: 2984.50,
avgPrice: 32.37
},
{
priceCategory: "Premium",
totalBooks: 2,
totalQuantity: 55,
totalValue: 2212.75,
avgPrice: 42.75
}
]