Database
[{"_id":{"$oid":"613714789a01802b620c2379"},"test":{f1:"1",field:42},"name":"Example 2","address":"Highway 2","documentType":"details","personalDetails":{"gender":"male","age":23,"position":null,"test2":{f1:"2",field:7},}}]
Query
db.collection.aggregate([{$project:{data:{$objectToArray:"$$ROOT"}}},{$addFields:{fields:"$data.k",data:{$map:{input:{$filter:{input:"$data",cond:{$eq:["object",{$type:"$$this.v"}]}}},in:{v:{$map:{input:{$objectToArray:"$$this.v"},as:"sub",in:{k:{$concat:["$$this.k",".","$$sub.k"]},v:"$$sub.v"}}}}}}}},{$addFields:{data:{$reduce:{input:"$data",initialValue:[],in:{$concatArrays:["$$value","$$this.v"]}}}}},{$addFields:{fields:{$concatArrays:["$fields","$data.k"]},data:{$map:{input:{$filter:{input:"$data",cond:{$eq:["object",{$type:"$$this.v"}]}}},in:{v:{$map:{input:{$objectToArray:"$$this.v"},as:"sub",in:{k:{$concat:["$$this.k",".","$$sub.k"]},v:"$$sub.v"}}}}}}}},{$addFields:{data:{$reduce:{input:"$data",initialValue:[],in:{$concatArrays:["$$value","$$this.v"]}}}}},{$project:{fields:{$concatArrays:["$fields","$data.k"]}}}])