No tienes acceso a esta clase

¬°Contin√ļa aprendiendo! √önete y comienza a potenciar tu carrera

Aprendemos a usar $lookup

14/21
Recursos

Aportes 4

Preguntas 0

Ordenar por:

¬ŅQuieres ver m√°s aportes, preguntas y respuestas de la comunidad?

Un ejemplo usando f√ļtbol: ```js // obtener los equipos con mas goles use("football") db.teams.aggregate([ { $lookup:{ from: "scorers", localField: "name", foreignField: "equipo", as: "Goleadores" } }, { $unwind: "$Goleadores" }, { $group: { _id: "$name", totalGoles: { $sum: "$Goleadores.goles" } } }, { $sort: {totalGoles: -1} }, { $project: { _id: 0, Equipo: "$_id", totalGoles: 1 } } ]) ```![](https://static.platzi.com/media/user_upload/image-8cec8f9d-f87e-44f2-970a-e92d79dce5db.jpg)
Comparto mi salida al reto:        $group: {            \_id: {                "client\_id": "$\_id",                "client\_name": "$name"            },            conteo\_transacciones: {                $sum: "$transactions\_info.transaction\_count"            }            // conteo\_transacciones: {            //     $sum: {            //         $size: "$transactions\_info.transactions"            //     }            // }        }    }, ![](https://static.platzi.com/media/user_upload/image-063476f7-7f79-429f-a17c-5b0da0ee88f6.jpg) En mi caso decidí agrupar por el customer id y el customer name, dado que pueden presentarse casos de clientes distintos que se llamen igual. Para el conteo de transacciones, no apliqué un size al array de las transacciones asociadas a una determinada account, sino que decidí tomar el atributo ya calculado que se encontraba en la colección de transacciones llamado transaction\_count con lo cual se logra el mismo resultado que con el size, pero en temas de performance de la consulta podría ser mejor al tomar atributos ya calculados. ```js { $group: { _id: { "client_id": "$_id", "client_name": "$name" }, conteo_transacciones: { $sum: "$transactions_info.transaction_count" } } }, ```
//realizar uniones con otras colecciones
// listar los clientes que tienen la mayor cantidad de transacciones
[
  {
    $lookup: {
      from: "accounts", // coleccion de donde se parte
      localField: "accounts", //campo de la coleccion customers
      foreignField: "account_id", // cacmpo a relacionar de la coleccion customers a la coleccion account
      as: "account_info"  //array donde se alamacena la informacion
    }
  },
  // para trabajar el array resultado del primer resultado
  {
    $unwind: "$account_info"  
  },
  {
    $lookup: {
      from: "transactions",
      localField: "account_info.account_id",
      foreignField: "account_id",
      as: "account_transactions"
    }
  },
  {
    $unwind: "$account_transactions"
  },
  {
    $group:{
      _id: "$name",
      totalCompras:{
        $sum:{
          $size: "$account_transactions.transactions"
        }
      }
    }
  },
  {
    $sort:{
      totalCompras: -1
    }
  },
    {
      $limit:5
    },
  {
    $project:{
      _id:0,
      Nombre: "$_id",
      totalCompras: 1
    }
  } 
]
use('sample_analytics')

db.customers.aggregate([
  {
    $lookup: {
      from: "accounts",
      localField: "accounts",
      foreignField: "account_id",
      as: "account_info"
    }
  },
  {
    $unwind: "$account_info"
  },
  {
    $lookup: {
      from: "transactions",
      localField: "account_info.account_id",
      foreignField: "account_id",
      as: "account_trasactions"
    }
  },
  {
    $unwind: "$account_trasactions"
  },
  {
    $group: {
      _id: "$name",
      total: {
        $sum: {
          $size: "$account_trasactions.transactions"
        }
      }
    }
  },
  {
    $sort: {
      total: -1
    }
  },
  {
    $limit: 5
  }
])