$dateAdd/$dateSubtract expressions do not detect an overflow for certain 'amount' values. A result is undefined in such cases. An example of an expression that overflows:
{"$dateAdd": {"startDate" : Timestamp(0, 4294967295), "unit" : "month", "amount" : {$multiply: [NumberLong("314159265358979383")]}, "timezone" : "+1187" }};