summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/expression.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/pipeline/expression.cpp')
-rw-r--r--src/mongo/db/pipeline/expression.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/mongo/db/pipeline/expression.cpp b/src/mongo/db/pipeline/expression.cpp
index 78b25008863..689dcf21e84 100644
--- a/src/mongo/db/pipeline/expression.cpp
+++ b/src/mongo/db/pipeline/expression.cpp
@@ -2630,17 +2630,19 @@ Value ExpressionMod::evaluate(const Document& root, Variables* variables) const
double left = lhs.coerceToDouble();
return Value(fmod(left, right));
- } else if (leftType == NumberLong || rightType == NumberLong) {
+ }
+
+ if (leftType == NumberLong || rightType == NumberLong) {
// if either is long, return long
long long left = lhs.coerceToLong();
long long rightLong = rhs.coerceToLong();
- return Value(left % rightLong);
+ return Value(mongoSafeMod(left, rightLong));
}
// lastly they must both be ints, return int
int left = lhs.coerceToInt();
int rightInt = rhs.coerceToInt();
- return Value(left % rightInt);
+ return Value(mongoSafeMod(left, rightInt));
} else if (lhs.nullish() || rhs.nullish()) {
return Value(BSONNULL);
} else {