Database
[{"id":"1","name":"First"},{"id":"2","name":"Second","ref1":{"referenceId":"3"},"ref2":[{"referenceId":"1",},{"referenceId":"3"}]},{"name":"Third","id":"3"}]
Query
db.collection.aggregate([{$match:{id:"2"}},{$addFields:{"references":{$map:{input:{"$objectToArray":"$$ROOT"},as:"item",in:{$cond:{if:{$ne:["$$item.v.referenceId",undefined]},then:["$$item.k","$$item.v.referenceId"],else:null}}}}}},{"$addFields":{"references":{$filter:{input:"$references",cond:{$ne:["$$this",null]}}}}},{"$addFields":{"references":{$map:{input:"$references",as:"item",in:{k:{"$arrayElemAt":["$$item",0]},v:{"$arrayElemAt":["$$item",1]}}}}}},{$unwind:"$references"},{$unwind:"$references.v"},{$lookup:{"from":"collection","localField":"references.v","foreignField":"id","as":"resolved"}},{$unwind:"$resolved"},{"$addFields":{"k":"$references.k","v":"$resolved"}},{$project:{resolved:0,references:0,}},{$replaceRoot:{newRoot:{$mergeObjects:["$$ROOT",{"$arrayToObject":[[{k:"$k",v:"$v"}]]}]}}},{$project:{k:0,v:0}},])