Database

[{"_id":2,"name":"Jane Doe","phones":[{"type":"Mobile","digits":[{"val":1},{"val":2}]},{"type":"Mobile","digits":[{"val":3},{"val":4}]},{"type":"Land","digits":[{"val":5},{"val":6}]}]},{"_id":1,"name":"John Doe","phones":[{"type":"Land","digits":[{"val":1},{"val":2}]},{"type":"Mobile","digits":[{"val":0},{"val":3},{"val":4}]},{"type":"Mobile","digits":[{"val":3},{"val":4},{"val":9}]}]}]

Query

db.collection.update({"name":"John Doe"},[{"$set":{"phones":{"$getField":{"field":"phones","input":{"$reduce":{"input":"$phones","initialValue":{"phones":[],"pullDone":false},"in":{"$cond":[{"$and":[{"$eq":["$$this.type","Mobile"]},{"$not":"$$value.pullDone"}]},{"pullDone":true,"phones":{"$concatArrays":["$$value.phones",[{"$mergeObjects":["$$this",{"digits":{"$filter":{"input":"$$this.digits","as":"digit","cond":{"$not":[{"$in":["$$digit.val",[3,4]]}]}}}}]}]]}},{"pullDone":"$$value.pullDone","phones":{"$concatArrays":["$$value.phones",["$$this"]]}}]}}}}}}}])

Result