Database

[{"_id":ObjectId("5c05984246a0201286d4b57a"),f:"x","_a":[{"_onlineStore":{}},{"_p":{"pid":1,"s":{"a":{"t":[{id:1,"dateP":"20200-09-20",did:"x",dst:"y",den:"z"},{id:2,"dateP":"20200-09-20"}]},"c":{"t":[{id:3,"dateP":"20300-09-22"},{id:4,"dateP":"20300-09-23",did:"x",dst:"y",den:"z"},{id:5,"dateP":"20300-09-23"}]}},h:"This is cleaned but it shauld not"}},{"_p":{"pid":2,"s":{"a":{"t":[{id:1,"dateP":"20200-09-20",},{id:2,"dateP":"20200-09-20"}]},"c":{"t":[{id:3,"dateP":"20300-09-22"},{id:4,"dateP":"20300-09-23",},{id:5,"dateP":"20300-09-23"}]}},h:"This is cleaned but it shauld not"}},{x:2}]}]

Query

db.collection.update({},[{"$set":{"_a":{"$map":{"input":"$_a","as":"elem","in":{"$cond":[{$or:[{"$eq":[{"$type":"$$elem._p"},"missing"]},{"$eq":[{"$type":"$$elem._p.s"},"missing"]}]},"$$elem",{_p:{$mergeObjects:["$$elem._p",{"s":{"$arrayToObject":{"$map":{"input":{"$objectToArray":"$$elem._p.s"},"as":"anyKey","in":{"k":"$$anyKey.k","v":{"t":{"$filter":{"input":"$$anyKey.v.t","as":"t","cond":{"$setIsSubset":[["did","dst","den"],{"$map":{"input":{"$objectToArray":"$$t"},"in":"$$this.k"}}]}}}}}}}}}]}}]}}}}}],{"multi":true})

Result