Database
[{"_id":ObjectId("5e24fbfd44621900c5730a48"),"customer":ObjectId("5dd7eaf7ef8a7b00ba8f090b"),"date":ISODate("2020-01-17T03:00:00.000Z"),"distance":24,"driver":ObjectId("5e1e302e26f00000c451923e"),"invoice":"0001-00001234","status":"pending"},{"_id":ObjectId("5e24fbfd44621900c5730a49"),"customer":ObjectId("5dd7eaf7ef8a7b00ba8f090b"),"date":ISODate("2020-01-17T03:00:00.000Z"),"distance":24,"status":"pending"},{"_id":ObjectId("5e24fbfd44621900c5730a50"),"customer":ObjectId("5dd7eaf7ef8a7b00ba8f090b"),"date":ISODate("2020-01-17T03:00:00.000Z"),"distance":24,"driver":ObjectId("5e1e302e26f00000c451923e"),"status":"in transit"}]
Query
db.collection.aggregate([{$addFields:{status:{$switch:{branches:[{case:{$eq:[{$type:"$driver"},"missing"]},then:"pending"},{case:{$eq:[{$type:"$driver"},"objectId"]},then:"in transit"},{case:{$and:[{$eq:[{$type:"$driver"},"objectId"]},{$eq:[{$type:"$invoice"},"string"]}]},then:"completed"},{case:{$and:[{$eq:[{$type:"$driver"},"objectId"]},{$eq:[{$type:"$invoice"},"string"]},{$eq:[{$type:"$billNumber"},"string"]}]},then:"billed"}],default:"$status"}}}}])