No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Manipulando campos con $set

9/21
Recursos

Aportes 3

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Solución del reto:

//media del precio, y que muestre el total por cada propiedad
[
  {
    $match: {
      "address.country_code": "US",
    },
  },
  {
    $sort: {
      property_type: 1,
      price: 1,
    },
  },

  // group by $property_type
  {
    $group: {
      _id: "$property_type",
      count:{
        $sum: 1
      },
      priceAvgMedia:{
        $avg: "$price"
      },
      cheaper: {
        $first: {
          nombre: "$name",
          precio: "$price",
          direccion: "$address",
        },
      },
      moreExpensive: {
        $last: {
          nombre: "$name",
          precio: "$price",
          direccion: "$address",
        },
      },
    },
  
  {
    $set:{
      "Tipo de propiedad": "$_id",
      "Cantidad por propiedad": "$count",
      "Precio promedio por propiedad": {$round:["$priceAvgMedia",2]},
      "propiedades destacadas":[
        {
          "tipo":"cheaper",
          "nombre":"$cheaper.nombre",
          "precioDolar":"$cheaper.precio",
          "tipoCambio": 4.00,
          "precioEuro": {$multiply: ["$cheaper.precio", 4.0]}
        },
        {
          "tipo":"moreExpensive",
          "nombre":"$moreExpensive.nombre",
          "precio":"$moreExpensive.precio",
          "tipoCambio": 4.00,
          "precioEuro": {$multiply: ["$moreExpensive.precio", 4.0]}
        }
      ]
    }
  },
  {
    $project:{
      _id:0,
      priceAvgMedia:0,
      count:0,
      cheaper:0,
      moreExpensive:0
    }
  }
  
]

Excelente!.

Uso de $project y $set:
$project:

  • Si la colección es compleja y requiere formatear datos para el resultado final.

$set:

  • Si la colección es sencillo o tiene pocos campos.
use('sample_airbnb')

db.listingsAndReviews.aggregate([
  {
    $match: {
      "address.country_code": "US"
    }
  },
  {
    $sort: {
    	property_type: 1,
      price : 1
    }
  },
  {
    $group: {
      _id: "$property_type",
      count:{
        $sum: 1
      },
      precioMedia: {
        $avg: "$price"
      },
      masBajo: {
        $first: {
          nombre: "$name",
       	 	precio: "$price",
        	direccion: "$address"
        }
      },
      masAlto: {
        $last: {
          nombre: "$name",
       	 	precio: "$price",
        	direccion: "$address"
        }
      },
    }
  },
  {
    $set:{
      "Tipo de Propiedad": "$_id",
      "Total": "$count",
      "Promedio": { $round: ["$precioMedia", 0] },
      "Precio mas Bajo": { $round: ["$masBajo.precio", 0] },
      "Precio mas Alto": { $round: ["$masAlto.precio", 0] },
      " Propiedades destacadas": [
        {
          "Tipo": "Mas bajo",
          "Nombre": "$masBajo.nombre",
          "Precio": "$masBajo.precio"
        },
        {
          "Tipo": "Mas Alto",
          "Nombre": "$masAlto.nombre",
          "Precio": "$masAlto.precio"
        }
      ]
    }
  },
  {
  $project: {
    _id: 0,
    precioMedia: 0,
    count: 0,
    masBajo: 0,
    masAlto: 0
  }
  }
])