Сводка данных MongoDB

MongoDBMongoDBBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

Практическое занятие проведет вас по шаг-by-шаг инструкциям, начиная с расчета суммарных значений, таких как общая стоимость книг и общая количество. Затем вы научитесь искать минимальные и максимальные цены на книги, подсчитывать количество документов и рассчитывать среднюю цену книги. Наконец, вы изучите генерацию отчетов для суммирования данных в вашей коллекции.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mongodb(("MongoDB")) -.-> mongodb/AggregationOperationsGroup(["Aggregation Operations"]) mongodb(("MongoDB")) -.-> mongodb/QueryOperationsGroup(["Query Operations"]) mongodb(("MongoDB")) -.-> mongodb/DataTypesGroup(["Data Types"]) mongodb/QueryOperationsGroup -.-> mongodb/find_documents("Find Documents") mongodb/QueryOperationsGroup -.-> mongodb/query_with_conditions("Query with Conditions") mongodb/QueryOperationsGroup -.-> mongodb/sort_documents("Sort Documents") mongodb/QueryOperationsGroup -.-> mongodb/project_fields("Project Fields") mongodb/DataTypesGroup -.-> mongodb/use_numeric_data_types("Use Numeric Data Types") mongodb/AggregationOperationsGroup -.-> mongodb/group_documents("Group Documents") mongodb/AggregationOperationsGroup -.-> mongodb/aggregate_group_totals("Aggregate Group Totals") subgraph Lab Skills mongodb/find_documents -.-> lab-422093{{"Сводка данных MongoDB"}} mongodb/query_with_conditions -.-> lab-422093{{"Сводка данных MongoDB"}} mongodb/sort_documents -.-> lab-422093{{"Сводка данных MongoDB"}} mongodb/project_fields -.-> lab-422093{{"Сводка данных MongoDB"}} mongodb/use_numeric_data_types -.-> lab-422093{{"Сводка данных MongoDB"}} mongodb/group_documents -.-> lab-422093{{"Сводка данных MongoDB"}} mongodb/aggregate_group_totals -.-> lab-422093{{"Сводка данных MongoDB"}} end

Рассчитать суммы

В этом шаге вы научитесь рассчитывать суммарные значения с использованием агрегирующей платформы MongoDB. Мы будем использовать примерную коллекцию книг, чтобы показать, как суммировать числовые поля.

Сначала запустим MongoDB shell и создадим примерную коллекцию книг:

mongosh

Теперь создадим коллекцию книг с ценами:

use bookstore

db.books.insertMany([
    { title: "Python Basics", price: 29.99, quantity: 50 },
    { title: "MongoDB Essentials", price: 39.99, quantity: 30 },
    { title: "Data Science Guide", price: 45.50, quantity: 25 },
    { title: "Web Development", price: 34.75, quantity: 40 }
])

Чтобы рассчитать общую стоимость всех книг, мы используем оператор агрегации $sum:

db.books.aggregate([
  {
    $group: {
      _id: null,
      totalBookValue: { $sum: { $multiply: ["$price", "$quantity"] } }
    }
  }
]);

Пример вывода:

[
  {
    _id: null,
    totalBookValue: 5197.25
  }
]

Разберём, что делает эта агрегация:

  • $group объединяет все документы в одну группу
  • _id: null означает, что мы агрегируем всю коллекцию
  • $multiply вычисляет общую стоимость каждой книги (цена * количество)
  • $sum суммирует все эти значения

Вы также можете рассчитать другие суммы, например, общее количество книг:

db.books.aggregate([
  {
    $group: {
      _id: null,
      totalQuantity: { $sum: "$quantity" }
    }
  }
]);

Пример вывода:

[
  {
    _id: null,
    totalQuantity: 145
  }
]

Найти минимальные и максимальные значения

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

Прежде всего, проверим нашу существующую коллекцию:

use bookstore
db.books.find()

Чтобы найти минимальную и максимальную цены на книги, мы используем операторы агрегации $min и $max:

db.books.aggregate([
  {
    $group: {
      _id: null,
      lowestPrice: { $min: "$price" },
      highestPrice: { $max: "$price" }
    }
  }
]);

Пример вывода:

[
  {
    _id: null,
    lowestPrice: 29.99,
    highestPrice: 45.50
  }
]

Мы также можем найти минимальное и максимальное количество:

db.books.aggregate([
  {
    $group: {
      _id: null,
      lowestQuantity: { $min: "$quantity" },
      highestQuantity: { $max: "$quantity" }
    }
  }
]);

Пример вывода:

[
  {
    _id: null,
    lowestQuantity: 25,
    highestQuantity: 50
  }
]

Для более детальных выводов мы можем найти книгу с самой низкой и самой высокой ценой:

db.books.aggregate([
  {
    $sort: { price: 1 }
  },
  {
    $limit: 1
  },
  {
    $project: {
      title: 1,
      price: 1
    }
  }
]);

Пример вывода:

[
  {
    _id: ObjectId("..."),
    title: "Python Basics",
    price: 29.99
  }
]

Подсчитать документы

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

Сначала проверим нашу существующую коллекцию:

use bookstore
db.books.find()

В MongoDB есть несколько способов подсчета документов. Изучим их:

  1. Базовый метод подсчета:
db.books.countDocuments();

Пример вывода:

4
  1. Подсчет документов с фильтром:
db.books.countDocuments({ price: { $gt: 35 } });

Это подсчитывает книги с ценой выше 35.

Пример вывода:

2
  1. Использование агрегирующей платформы для подсчета:
db.books.aggregate([
  {
    $match: { quantity: { $gte: 30 } }
  },
  {
    $count: "booksWithHighQuantity"
  }
]);

Это подсчитывает книги с количеством, большим или равным 30.

Пример вывода:

[
  {
    booksWithHighQuantity: 3
  }
]
  1. Подсчет уникальных значений:
db.books.aggregate([
  {
    $group: {
      _id: "$title",
      count: { $sum: 1 }
    }
  }
]);

Это показывает, сколько раз каждый заголовок книги встречается.

Пример вывода:

[
  {
    _id: "Python Basics",
    count: 1
  },
...
]

Рассчитать средние значения

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

Сначала проверим нашу существующую коллекцию:

use bookstore
db.books.find()
  1. Рассчитать среднюю цену книги:
db.books.aggregate([
  {
    $group: {
      _id: null,
      averagePrice: { $avg: "$price" }
    }
  }
]);

Пример вывода:

[
  {
    _id: null,
    averagePrice: 37.56
  }
]
  1. Рассчитать среднее количество с округлением:
db.books.aggregate([
  {
    $group: {
      _id: null,
      averageQuantity: { $avg: "$quantity" }
    }
  },
  {
    $project: {
      averageQuantity: { $round: ["$averageQuantity", 2] }
    }
  }
]);

Пример вывода:

[
  {
    _id: null,
    averageQuantity: 36.25
  }
]
  1. Средняя цена по условной группировке:
db.books.aggregate([
  {
    $group: {
      _id: {
        priceCategory: {
          $switch: {
            branches: [
              { case: { $lt: ["$price", 35] }, then: "Budget" },
              { case: { $gte: ["$price", 35] }, then: "Premium" }
            ]
          }
        }
      },
      averagePrice: { $avg: "$price" }
    }
  }
]);

Пример вывода:

[
  {
    _id: { priceCategory: "Budget" },
    averagePrice: 32.37
  },
  {
    _id: { priceCategory: "Premium" },
    averagePrice: 42.75
  }
]

Генерировать отчеты

В этом финальном шаге вы научитесь генерировать более сложные отчеты с использованием агрегирующей платформы MongoDB. Мы объединим несколько этапов агрегации, чтобы создать информативные отчеты на основе нашей коллекции книг.

Сначала проверим нашу существующую коллекцию:

use bookstore
db.books.find()
  1. Полный отчет по инвентарию книг:
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"
  },
...
]
  1. Отчет о распределении ценовых диапазонов:
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"]
  },
...
]
  1. Подробный отчет о производительности продаж:
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
  }
]

Резюме

В этом практическом занятии вы научитесь рассчитывать суммы, искать минимальные и максимальные значения, подсчитывать документы, рассчитывать средние значения и генерировать отчеты с использованием агрегирующей платформы MongoDB. Сначала вы рассчитаете общую стоимость всех книг в образцовой коллекции книг, используя оператор агрегации $sum. Также вы научитесь рассчитывать общее количество книг. Далее вы найдете минимальную и максимальную цены на книги с использованием операторов агрегации $min и $max. Затем вы узнаете, как подсчитать количество документов в коллекции и рассчитать среднюю цену книги.