Database

[{_id:1,img:[{tar:[{z:1,img:[1,2,3]},{z:2,img:[4,5,6]},{z:3,img:[2]},{img:[2]}]}]},{_id:2,img:[]},{_id:3,img:[{x:1,tar:[]}]},{_id:4,img:[{tar:[{x:2,img:[]}]}]}]

Query

db.collection.update({},[{/** remove element img.tar.img:2*/$addFields:{img:{"$map":{"input":"$img","as":"i","in":{"$mergeObjects":["$$i",{tar:{"$map":{"input":"$$i.tar","as":"t","in":{"$mergeObjects":["$$t",{"img":{"$filter":{"input":"$$t.img","as":"i2","cond":{$ne:["$$i2",2]}}}}]}}}}]}}}}},{/** remove empty img:[] + empty {} under img.tar[]*/$addFields:{img:{"$map":{"input":"$img","as":"i","in":{"$mergeObjects":["$$i",{tar:{$filter:{input:{"$map":{"input":"$$i.tar","as":"t","in":{$arrayToObject:{$filter:{input:{$objectToArray:"$$t"},as:"tf",cond:{$ne:["$$tf.v",[]]}}}}}},as:"te",cond:{$ne:["$$te",{}]}}}}]}}}}},{/** remove img.tar:[]*/$addFields:{img:{$filter:{input:{"$map":{"input":"$img","as":"i","in":{$arrayToObject:{$filter:{input:{$objectToArray:"$$i"},as:"tf",cond:{$ne:["$$tf.v",[]]}}}}}},as:"te",cond:{$ne:["$$te",{}]}}}}},{/** remove empty 1st level img:[]*/$project:{"img":{"$cond":[{$ne:["$img",[]]},"$img","$$REMOVE"]}}}],{multi:true})

Result