{"id":229,"date":"2023-08-27T14:20:24","date_gmt":"2023-08-27T17:20:24","guid":{"rendered":"https:\/\/danielsegovia.com\/plataforma\/?p=229"},"modified":"2023-08-27T14:20:24","modified_gmt":"2023-08-27T17:20:24","slug":"26-mongo-ii-aggregate","status":"publish","type":"post","link":"https:\/\/danielsegovia.com\/plataforma\/26-mongo-ii-aggregate\/","title":{"rendered":"26 &#8211; Mongo II &#8211; Aggregate"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Las agregaciones son una caracter\u00edstica poderosa de MongoDB que te permiten realizar operaciones de procesamiento de datos avanzadas en tus datos almacenados. Aqu\u00ed tienes un esquema para tu nuevo art\u00edculo sobre agregaciones en MongoDB con Node.js:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 son las agregaciones?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Las bases de datos modernas no solo almacenan datos, sino que tambi\u00e9n ofrecen una forma de procesarlos y obtener informaci\u00f3n valiosa. En esta traves\u00eda hacia el conocimiento, exploraremos las \u00abagregaciones\u00bb en MongoDB, una caracter\u00edstica que eleva la manipulaci\u00f3n de datos a un nivel superior. Acomp\u00e1\u00f1anos mientras descubrimos c\u00f3mo las agregaciones permiten realizar c\u00e1lculos complejos, transformaciones y an\u00e1lisis de datos directamente en la base de datos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En el mundo de MongoDB, las agregaciones son la forma de realizar operaciones avanzadas de procesamiento de datos. En lugar de recuperar datos y procesarlos en el lado del servidor, las agregaciones realizan las operaciones directamente en la base de datos, lo que ahorra tiempo y recursos y simplifica el c\u00f3digo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exploraremos operaciones clave como match, group, project, sort y m\u00e1s. Aprenderemos c\u00f3mo construir canalizaciones de agregaci\u00f3n para aplicar estas operaciones en secuencia y obtener resultados precisos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Analizando Datos de Ventas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a sumergirnos en un escenario realista: analizar datos de ventas en una aplicaci\u00f3n de comercio electr\u00f3nico. Utilizaremos agregaciones para calcular ingresos totales, productos m\u00e1s vendidos y patrones de compra de los clientes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Realizo la conexi\u00f3n, definici\u00f3n de esquemas y modelo<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">const mongoose = require('mongoose');\n\n\/\/ Configuraci\u00f3n de la conexi\u00f3n a la base de datos\nmongoose.connect('mongodb:\/\/admin:secretpassword@localhost:27017\/mydatabase', {\n  useNewUrlParser: true,\n  useUnifiedTopology: true\n});\n\n\/\/ Modelo para la colecci\u00f3n de ventas\nconst Sale = mongoose.model('Sale', new mongoose.Schema({\n  product: String,\n  quantity: Number,\n  price: Number\n}));<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Inserto algunos datos de ejemplos<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para trabajar con las siguientes agregaciones realizar\u00e9 el insert de algunos datos de ejemplo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">\/\/ Insertar datos de ventas de ejemplo\nconst salesData = [\n  { product: 'Producto A', quantity: 5, price: 20 },\n  { product: 'Producto B', quantity: 3, price: 30 },\n  { product: 'Producto A', quantity: 2, price: 20 },\n  \/\/ Agrega m\u00e1s datos de ventas aqu\u00ed\n];\n\nSale.insertMany(salesData)\n  .then(() => {\n    console.log('Datos de ventas insertados exitosamente');\n  })\n  .catch((err) => {\n    console.error('Error al insertar datos de ventas:', err);\n  });<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Agregaciones<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed tienes algunos ejemplos de operaciones de agregaci\u00f3n en MongoDB, junto con explicaciones de lo que hacen cada una de ellas. Estos ejemplos te ayudar\u00e1n a comprender mejor c\u00f3mo funcionan las agregaciones y c\u00f3mo pueden ser utilizadas en diferentes situaciones.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Agrupaci\u00f3n y Suma<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">Sale.aggregate([\n  {\n    $group: {\n      _id: '$product',\n      totalQuantity: { $sum: '$quantity' },\n      totalPrice: { $sum: { $multiply: ['$quantity', '$price'] } }\n    }\n  }\n])<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo, estamos agrupando las ventas por producto (<strong>$product<\/strong>). Luego, utilizamos la operaci\u00f3n <strong>$sum<\/strong> para calcular la cantidad total de productos vendidos (totalQuantity) y el ingreso total por producto (totalPrice) multiplicando la cantidad por el precio de cada venta.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Filtrado y proyecciones<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">Sale.aggregate([\n  {\n    $match: { product: 'Producto A' }\n  },\n  {\n    $project: {\n      _id: 0,\n      product: 1,\n      totalAmount: { $multiply: ['$quantity', '$price'] }\n    }\n  }\n])<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed utilizamos $match para filtrar las ventas y seleccionamos solo aquellas que corresponden al producto &#8216;Producto A&#8217;. Luego, con <strong>$project<\/strong>, proyectamos solo los campos product y totalAmount, que calculamos multiplicando la cantidad por el precio de cada venta. Tambi\u00e9n excluimos el campo _id del resultado.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Ordenamiento y Limitaci\u00f3n<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">Sale.aggregate([\n  {\n    $group: {\n      _id: '$product',\n      totalQuantity: { $sum: '$quantity' }\n    }\n  },\n  {\n    $sort: { totalQuantity: -1 }\n  },\n  {\n    $limit: 5\n  }\n])<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Primero, agrupamos las ventas por producto y calculamos la cantidad total de productos vendidos. Luego, utilizamos <strong>$sort<\/strong> para ordenar los resultados en orden descendente seg\u00fan la cantidad total de productos vendidos. Finalmente, utilizamos <strong>$limit<\/strong> para limitar los resultados a los 5 productos m\u00e1s vendidos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prep\u00e1rate para la siguiente clase<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En la siguiente clase veremos todos los aggregate<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Las agregaciones son una caracter\u00edstica poderosa de MongoDB que te permiten realizar operaciones de procesamiento de datos avanzadas en tus datos almacenados. Aqu\u00ed tienes un esquema para tu nuevo art\u00edculo sobre agregaciones en MongoDB con Node.js: \u00bfQu\u00e9 son las agregaciones? Las bases de datos modernas no solo almacenan datos, sino que tambi\u00e9n ofrecen una forma &#8230; <a title=\"26 &#8211; Mongo II &#8211; Aggregate\" class=\"read-more\" href=\"https:\/\/danielsegovia.com\/plataforma\/26-mongo-ii-aggregate\/\" aria-label=\"Leer m\u00e1s sobre 26 &#8211; Mongo II &#8211; Aggregate\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,3],"tags":[],"class_list":["post-229","post","type-post","status-publish","format-standard","hentry","category-backend-con-node-js","category-curso-de-node-js"],"_links":{"self":[{"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/posts\/229","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/comments?post=229"}],"version-history":[{"count":2,"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/posts\/229\/revisions"}],"predecessor-version":[{"id":707,"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/posts\/229\/revisions\/707"}],"wp:attachment":[{"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/media?parent=229"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/categories?post=229"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/danielsegovia.com\/plataforma\/wp-json\/wp\/v2\/tags?post=229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}