soy nuevo en mongodb y tengo problemas para agrupar una matriz de un documento como este:
_id: ObjectId('5d7afa2609d6ed000dffe1de') email: "email@email.com" transactions: [ { "date": "2020-06-10T00:00:00.000+00:00", "shares": 100, "price": 20, "type": "buy", "equity_id": "petr4" }, { "date": "2020-07-10T00:00:00.000+00:00", "shares": 200, "price": 10, "type": "sell", "equity_id": "petr4" }, { "date": "2020-06-10T00:00:00.000+00:00", "shares": 250, "price": 30, "type": "buy", "equity_id": "vale3" }, ... ]Me gustaría agrupar estas transacciones por fecha y obtener un documento como este:
_id: ObjectId('5d7afa2609d6ed000dffe1de') email: "email@email.com" transactionsByDay: { "2020-06-10": [ { "shares": 100, "price": 20, "type": "buy", "equity_id": "petr4" }, { "shares": 250, "price": 30, "type": "buy", "equity_id": "petr4" } ], "2020-07-10": [ { "shares": 200, "price": 10, "type": "sell", "equity_id": "petr4" } ], ... }Intenté una agregación usando un operador de grupo pero el resultado no fue el esperado. Alguien me puede dar una ayuda para solucionar esto?
Esto se puede lograr en dos pasos.
let arr = [ { "date": "2020-06-10T00:00:00.000+00:00", "shares": 100, "price": 20, "type": "buy", "equity_id": "petr4" }, { "date": "2020-07-10T00:00:00.000+00:00", "shares": 200, "price": 10, "type": "sell", "equity_id": "petr4" }, { "date": "2020-06-10T00:00:00.000+00:00", "shares": 250, "price": 30, "type": "buy", "equity_id": "vale3" } ] let transactionsByDay = arr.reduce((a,e,i) => { if(e.type == 'buy') a['buy'].push(e) else if(e.type == 'sell') a['sell'].push(e) return a },{buy : [], sell: []}) Object.keys(transactionsByDay).map(id => { transactionsByDay[`${transactionsByDay[id][0].date.slice(0,10)}`] = [...transactionsByDay[id]]; delete transactionsByDay[id]; }) console.log(transactionsByDay)