Форматирование вывода
На этом этапе мы рассмотрим различные техники форматирования и преобразования вывода с использованием конвейера агрегации (aggregation pipeline) MongoDB. Продолжим работу с нашей базой данных "bookstore".
Начнем с запуска оболочки MongoDB (MongoDB shell):
mongosh
Переключимся на базу данных "bookstore":
use bookstore
Сначала используем $toUpper
и $toLower
для форматирования текстовых полей:
db.books.aggregate([
{
$project: {
_id: 0,
titleUpperCase: { $toUpper: "$title" },
authorLowerCase: { $toLower: "$author" }
}
}
]);
Пример вывода:
[
{
titleUpperCase: 'MONGODB BASICS',
authorLowerCase: 'jane smith'
},
//... other book documents
]
Далее отформатируем числовые значения с использованием $round
и создадим отформатированные строки цен:
db.books.aggregate([
{
$project: {
_id: 0,
title: 1,
roundedPrice: { $round: ["$price", 1] },
formattedPrice: {
$concat: ["$", { $toString: { $round: ["$price", 2] } }]
}
}
}
]);
Пример вывода:
[
{
title: 'MongoDB Basics',
roundedPrice: 30,
formattedPrice: '$29.99'
},
//... other book documents
]
Мы также можем форматировать массивы и создавать сложные строковые представления:
db.books.aggregate([
{
$project: {
_id: 0,
title: 1,
categoriesSummary: {
$reduce: {
input: "$categories",
initialValue: "",
in: {
$concat: [
"$$value",
{ $cond: [{ $eq: ["$$value", ""] }, "", ", "] },
"$$this"
]
}
}
}
}
}
]);
Пример вывода:
[
{
title: 'MongoDB Basics',
categoriesSummary: 'Database, Programming'
},
//... other book documents
]
В последнем примере используется $reduce
для объединения элементов массива в строку, разделенную запятыми.