Database
[{"key":1,"oldDocument":{"Modified":"A","Status":"B","other":ISODate("2022-04-03T10:32:53.149Z")},"newDocument":{"Modified":"L","Status":"B","other":ISODate("2022-05-03T10:32:53.149Z")},"updatedFields":["Modified","other"],},{"key":2,"oldDocument":{"Modified":"K","Status":"P","other":ISODate("2022-04-03T10:32:53.149Z")},"newDocument":{"Modified":"P","Status":"B","other":ISODate("2022-04-03T10:32:53.149Z")},"updatedFields":["Modified","Status"],}]
Query
db.collection.aggregate([{"$project":{oldDocumentArr:{"$objectToArray":"$oldDocument"},newDocumentArr:{"$objectToArray":"$newDocument"},updatedFields:1}},{$project:{oldDocumentFilter:{$map:{input:{$filter:{input:"$oldDocumentArr",as:"item",cond:{$in:["$$item.k","$updatedFields"]}}},"as":"obj","in":{"k":"$$obj.k","v":{$toString:"$$obj.v"}}}},newDocumentFilter:{$map:{input:{$filter:{input:"$newDocumentArr",as:"item",cond:{$in:["$$item.k","$updatedFields"]}}},"as":"obj","in":{"k":"$$obj.k","v":{$toString:"$$obj.v"}}}}}},{$project:{oldDocument:{"$arrayToObject":"$oldDocumentFilter"},newDocument:{"$arrayToObject":"$newDocumentFilter"},_id:0}}])