$out en MongoDB
La operación
$out
en MongoDB se utiliza en las operaciones de agregación para almacenar los resultados de una consulta de agregación en una nueva colección o sobrescribir una colección existente. Esta operación es útil cuando deseas guardar los resultados de una operación de agregación en una colección separada.
MongoDB almacena documentos JSON flexibles. Esta operación encaja en el flujo consultar → filtrar → transformar → agregar que verás en el tutorial completo.
Prueba en el editor y adapta los campos del documento a tu caso de uso.
Crear una operación de agregación
Primero, debes definir la operación de agregación que deseas realizar. Esto puede incluir una serie de etapas de agregación, como
$match
,
$group
,
$sort
,
$project
, entre otras, para transformar y procesar los datos según tus necesidades.
Por ejemplo, consideremos un conjunto de documentos en una colección "ventas" y queremos calcular el total de ventas por producto. La operación de agregación para esto podría verse de la siguiente manera:
Ejemplo
const pipeline = [
{
$group: {
_id: "$producto",
totalVentas: { $sum: "$monto" }
}
},
{
$sort: { totalVentas: -1 }
}
];
Este pipeline agrupa los documentos por el campo "producto" y calcula el total de ventas para cada producto, luego los ordena en orden descendente por el total de ventas.
Agregar la etapa $out
La etapa
$out
es lo que te permite guardar los resultados de la operación de agregación en una nueva colección o sobrescribir una colección existente. Debes agregar esta etapa al final de tu pipeline de agregación.
Ejemplo
const pipeline = [
{
$group: {
_id: "$producto",
totalVentas: { $sum: "$monto" }
}
},
{
$sort: { totalVentas: -1 }
},
{
$out: "resultado_ventas_por_producto"
}
];
En este ejemplo, la etapa
$out
especifica que los resultados de la operación de agregación se guardarán en una nueva colección llamada "resultado_ventas_por_producto". Si esta colección ya existe, la sobrescribirá.
Ejecutar la operación de agregación
Finalmente, ejecuta la operación de agregación en MongoDB para que los resultados se almacenen en la nueva colección o sobrescriban una existente. Puedes hacerlo utilizando el método
aggregate
en el cliente de MongoDB en un entorno de programación como Node.js o mediante el comando
aggregate
en el shell de MongoDB.
En Node.js :
Ejemplo
const { MongoClientrequire("mongodb");
const uri = "mongodb://localhost:27017/tu_base_de_datos";
const client = new MongoClient(uri);
async function ejecutarAgregacion() {
try {
await client.connect();
const database = client.db("tu_base_de_datos");
const ventasCollection = database.collection("ventas");
const pipeline = [
// Definir el pipeline de agregación aquí
// ...
{
$out: "resultado_ventas_por_producto"
}
];
await ventasCollection.aggregate(pipeline).toArray();
console.log("Operación de agregación completada con éxito.");
} catch (error) {
console.error("Error al ejecutar la operación de agregación:", error);
} finally {
client.close();
}
}
ejecutarAgregacion();
En el shell de MongoDB
Observa qué columnas devuelve la consulta y cómo se nombran con AS. Ese alias es lo que verás en la cuadrícula del editor.
Ejemplo
db.ventas.aggregate([
// Definir el pipeline de agregación aquí
// ...
{
$out: 'resultado_ventas_por_producto'
}
])
Después de ejecutar la operación de agregación, los resultados se guardarán en la colección "resultado_ventas_por_producto".
La operación
$out
es especialmente útil cuando deseas almacenar resultados intermedios de agregación o realizar cálculos complejos y luego analizar los datos resultantes en una nueva colección. Asegúrate de personalizar la operación de agregación y la colección de salida según tus necesidades específicas.