Database
[{_id:1,img:[1,2,3],tar:[{z:1,img:[1,2,3]},{z:2,img:[4,5,6]},{z:3,img:[2]},{img:[2]}]},{_id:2,img:[2],tar:[{img:[]}]},{_id:3,img:[],tar:[]}]
Query
db.collection.update({},[{/** remove 2 from img[]*/"$addFields":{"img":{"$filter":{"input":"$img","as":"i","cond":{"$ne":["$$i",2]}}}}},{/** remove 2 from tar.img:[]*/"$addFields":{"tar":{"$map":{"input":"$tar","as":"t","in":{"$mergeObjects":["$$t",{img:{"$filter":{"input":"$$t.img","as":"ti","cond":{"$ne":["$$ti",2]}}}}]}}}}},{/** remove empty img:[]*/"$addFields":{"img":{"$cond":{"if":{"$ne":["$img",[]]},"then":"$img","else":"$$REMOVE"}}}},{/** remove {img:[]} from tar:[]*/"$addFields":{"tar":{$filter:{input:{"$map":{"input":"$tar","as":"t","in":{$arrayToObject:{$filter:{input:{$objectToArray:"$$t"},as:"tf",cond:{$ne:["$$tf.v",[]]}}}}}},as:"te",cond:{$ne:["$$te",{}]}}}}},{/** remove empty tar:[]*/"$addFields":{"tar":{"$cond":{"if":{"$ne":["$tar",[]]},"then":"$tar","else":"$$REMOVE"}}}}],{multi:true})