Tengo este tipo de datos en mi servidor.
[ { "brand": "Hyundai", "model": "Pickup -0395", "price": 80000 }, { "brand": "Hyundai", "model": "Sports Car -0305", "price": 70000 }, { "brand": "Tesla", "model": "Sports Car -05", "price": 180000 }, { "brand": "Tesla", "model": "Sedan -95", "price": 150000 }, { "brand": "BMW", "model": "Minivan -0395", "price": 100000 }, { "brand": "BMW", "model": "Sports car -0395", "price": 90000 } ]Pero quiero obtener un solo documento/producto de cada marca (propiedad).
Necesitaría algún criterio para saber qué Hyundai/Tesla/BMW es. Supongamos que desea el más barato en cualquier caso, podría optar por
db.cars.aggregate([ {$sort: {brand: 1, price: 1}}, {$group: {_id: '$brand', cheapest: {$first: '$$ROOT'}}}, ])Puede hacer algo como esto si desea agruparlo por marca en el lado del cliente
const grouped = (data) => data.reduce((res, {brand, ...model}) => { const existing = res[brand] || [] res[brand] = [...existing, model] return res }, {}) const data = [ { "brand": "Hyundai", "model": "Pickup -0395", "price": 80000 }, { "brand": "Hyundai", "model": "Sports Car -0305", "price": 70000 }, { "brand": "Tesla", "model": "Sports Car -05", "price": 180000 }, { "brand": "Tesla", "model": "Sedan -95", "price": 150000 }, { "brand": "BMW", "model": "Minivan -0395", "price": 100000 }, { "brand": "BMW", "model": "Sports car -0395", "price": 90000 } ] console.log(grouped(data))