16. Aggregation Framework
(1) Был добавлен в MongoDB 2.2 для выполнения
простых операций агрегации;
(2) Содержит набор операций, которые могут
быть
объединены
в
цепочки
(результат
предыдущей операции является входными
данными для последующей).
17. КАК
ЭТО РАБОТАЕТ?
(1) Определяем коллекцию, которую будем
трансформировать;
(2) Определяем цепочку операторов (pipeline);
(3) Коллекция проходит через цепочку;
(4) Результаты возвращаются как документ.
18. Соответствие SQL и Aggregation операций
SQL Terms and Functions
MongoDB Aggregation
Operators
WHERE
$match
GROUP BY
$group
HAVING
$match
SELECT
$project
ORDER BY
$sort
20. ЗАДАЧА
Вывести количество работников с группировкой по должности, у
которых зарплата не менее заданного значения
Документ
{
"name": "employee 1",
"position": "Junior",
"salary": 400
}
SQL запрос
SELECT position, count(*)
FROM employees
WHERE salary >= 500
GROUP BY position
Aggregation запрос
db.employees.aggregate([
{"$match": {"salary": {"$gte": 500}}},
{"$group": {"_id": "$position", "count": {"$sum": 1}}}
])
23. {
"_id" : "16530152929",
"authorName" : "edcg",
"averageRating" : 3.625,
"comments" : [
{
"_id" : "443219543",
"moderationStatus" : "STATUS_NOT_MODERATED",
"authorName" : "pd14_98",
…
"commentType" : "NORMAL",
"commentBody" : "This comment is from someone",
}
],
"make" : "fiat",
"model" : "500",
"year" : "2012",
"moderationStatus" : "STATUS_PASSED",
"text" : "I've been waiting for this car to come to the US...",
"title" : "Fun, Cute but No Power“
…
}
24. $match
фильтрует документы, используя существующий синтаксис
для запросов
{ $match : { averageRating : { $gt : 4.0} } }
{
_id : 2,
averageRating : 4.025,
make : "fiat",
model : "500",
year : 2012
{
_id : 2,
averageRating : 4.025,
make : "fiat",
model : "500",
year : 2012
}
{
_id : 3,
averageRating : 3.5,
make : "fiat",
model : "500",
year : 2012
}
}
25. $project
(1) Меняет структуру документа;
(2) Добавляет, исключает или
переименовывает поля;
(3) Позволяет добавлять вычисляемые поля;
(4) Создает субдокументы.
26. Включение/исключение полей/cоздание
вложенного документа
$project: { _id: 0, title: 1, text: 1,
vehicle: { make: "$make", model: "$model", year: "$year" }
}
{
"_id" : "16530152929",
"authorName" : "edcg",
"make" : "fiat",
"model" : "500",
"year" : "2012",
"targetId" : "64851612",
"moderationStatus" :
"STATUS_PASSED",
"text" : "I've been waiting for this
car to come to the US...",
"title" : "Fun, Cute but No Power"
}
{
title : "Fun, Cute but No Power“,
text : "I've been waiting for this car
to come to the US...“,
vehicle: {
make: “fiat”,
model: “500“,
year: “2012”
}
}
27. $group
(1) Группирует
документы по ID:
Поле, объект, константа
(2) Другие
поля (кроме ID) вычисляются:
• Операторы группировки (group operators): $first, $last,
$max, $min, $avg, $sum…
• Операторы с логическими значениями (boolean
operators): $and, $or, $not
• Операторы сравнения (comparison operators): $eq, $gt,
$gte, $lt, $lte, $ne
• Условные выражения (conditional expressions): $cond,
$ifNull
…
28. $unwind
(1) Операция над полями типа массив;
(2) Возвращает новый документ для каждого
элемента массива:
Массив заменяется значением элемента;
Если поле отсутствует или пустое, ничего не
возвращается;
• В случае, если поле имеет другой тип (не массив),
возвращается ошибка.
•
•