Database

[{"_id":ObjectId("53340d07d6429d27e1284c77"),"company":"New Company","worktypes":[{"name":"Pompas","works":[{"name":"name 2","code":"A00011","price":"22,22"},{"name":"name 3","code":"A00011","price":"22,22"},{"name":"name 4","code":"A00011","price":"22,22"},{"code":"asdasd","name":"asdads","price":"22"},{"code":"yy","name":"yy","price":"11"}]},{"name":"name 4","works":[{"code":"A112","name":"Nombre","price":"11,2"}]},{"name":"ee","works":[{"code":"aa","name":"aa","price":"11"},{"code":"A00112","name":"Nombre","price":"12,22"}]}]}]

Query

db.collection.aggregate([{$match:{$and:[{"company":"New Company"},{$or:[{"worktypes.works.name":{"$regex":"^A00011$|^a00011$"}},{"worktypes.works.code":{"$regex":"^A00011$|^a00011$"}}]}]}},{$addFields:{worktypes:{$map:{input:"$worktypes",in:{$mergeObjects:["$$this",{works:{$filter:{input:"$$this.works",cond:{$or:[{$regexMatch:{input:"$$this.name",regex:"^A00011$|^a00011$"}},{$regexMatch:{input:"$$this.code",regex:"^A00011$|^a00011$"}}]}}}}]}}}}},{$addFields:{worktypes:{$filter:{input:"$worktypes",cond:{$ne:["$$this.works",[]]}}}}}])

Result