Database
[{"type":"A","object":{"a":"","b":"foo"}},{"type":"A","object":{"a":""}},{"type":"A","object":{"a":"","b":null}},{"type":"A"},{"type":"A","object":null},{"type":"B"},{"type":"B","object":{"k":1}}]
Query
db.collection.aggregate([{"$set":{"object":{"$switch":{"branches":[{"case":{"$eq":[{"$type":"$object"},"missing"]},"then":{"$cond":[{"$eq":["$type","A"]},{"b":"bar"},"$$REMOVE"]}},{"case":{"$and":[{"$eq":["$type","A"]},{"$or":[{"$eq":["$object.b",null]},{"$eq":[{"$type":"$object.b"},"missing"]}]}]},"then":{"$mergeObjects":["$object",{"b":"bar"}]}}],"default":"$object"}}}}])