En este paso, exploraremos diversas técnicas para dar formato y transformar la salida utilizando la tubería de agregación (aggregation pipeline) de MongoDB. Continuaremos trabajando con nuestra base de datos de la librería (bookstore).
Comencemos lanzando la shell de MongoDB:
mongosh
Cambiemos a la base de datos de la librería:
use bookstore
Primero, usemos $toUpper
y $toLower
para dar formato a los campos de texto:
db.books.aggregate([
{
$project: {
_id: 0,
titleUpperCase: { $toUpper: "$title" },
authorLowerCase: { $toLower: "$author" }
}
}
]);
Ejemplo de salida:
[
{
titleUpperCase: 'MONGODB BASICS',
authorLowerCase: 'jane smith'
},
//... other book documents
]
A continuación, demos formato a los valores numéricos utilizando $round
y creemos cadenas de precio formateadas:
db.books.aggregate([
{
$project: {
_id: 0,
title: 1,
roundedPrice: { $round: ["$price", 1] },
formattedPrice: {
$concat: ["$", { $toString: { $round: ["$price", 2] } }]
}
}
}
]);
Ejemplo de salida:
[
{
title: 'MongoDB Basics',
roundedPrice: 30,
formattedPrice: '$29.99'
},
//... other book documents
]
También podemos dar formato a las matrices (arrays) y crear representaciones de cadenas complejas:
db.books.aggregate([
{
$project: {
_id: 0,
title: 1,
categoriesSummary: {
$reduce: {
input: "$categories",
initialValue: "",
in: {
$concat: [
"$$value",
{ $cond: [{ $eq: ["$$value", ""] }, "", ", "] },
"$$this"
]
}
}
}
}
}
]);
Ejemplo de salida:
[
{
title: 'MongoDB Basics',
categoriesSummary: 'Database, Programming'
},
//... other book documents
]
Este último ejemplo utiliza $reduce
para unir los elementos de la matriz en una cadena separada por comas.