Database

[{"invoice_id":"GRS","segment":"D","metric":"2019","revenue":100,},{"invoice_id":"RET","segment":"D","metric":"2019","revenue":100,},{"invoice_id":"GRS","segment":"R","metric":"2020","revenue":100,},{"invoice_id":"RET","segment":"R","metric":"2021","revenue":100,},{"invoice_id":"GRS","segment":"R","metric":"2021","revenue":100,},{"invoice_id":"RET","segment":"D","metric":"2020","revenue":100,},{"invoice_id":"GRS","segment":"D","metric":"2021","revenue":100,}]

Query

db.collection.aggregate([{$group:{_id:{invoice_id:"$invoice_id",segment:"$segment",metric:"$metric"},revenue:{$sum:"$revenue"}}},{$group:{_id:{invoice_id:"$_id.invoice_id",segment:"$_id.segment"},years:{$push:{k:"$_id.metric",v:"$revenue"}}}},{$replaceRoot:{newRoot:{$mergeObjects:["$_id",{$arrayToObject:"$years"}]}}}])

Result