summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jstests/aggregation/bugs/substr.js13
-rw-r--r--src/mongo/db/pipeline/expression.cpp6
2 files changed, 8 insertions, 11 deletions
diff --git a/jstests/aggregation/bugs/substr.js b/jstests/aggregation/bugs/substr.js
index 0c7f5bef64d..c4eaff7e137 100644
--- a/jstests/aggregation/bugs/substr.js
+++ b/jstests/aggregation/bugs/substr.js
@@ -1,8 +1,5 @@
// Aggregation $substrBytes tests.
-(function() {
-"use strict";
-
t = db.jstests_aggregation_substr;
t.drop();
@@ -48,11 +45,10 @@ assertException('abcd', -10, 0);
// Additional numeric types for offset / length.
assertSubstring('bc', 'abcd', 1, 2);
assertSubstring('bc', 'abcd', 1.0, 2.0);
-assertSubstring('bc', 'abcd', NumberInt("1"), NumberInt("2"));
-assertSubstring('bc', 'abcd', NumberLong("1"), NumberLong("2"));
-assertSubstring('bc', 'abcd', NumberInt("1"), NumberLong("2"));
-assertSubstring('bc', 'abcd', NumberLong("1"), NumberInt("2"));
-assertSubstring('bc', 'abcd', NumberDecimal("1"), NumberDecimal("2"));
+assertSubstring('bc', 'abcd', NumberInt(1), NumberInt(2));
+assertSubstring('bc', 'abcd', NumberLong(1), NumberLong(2));
+assertSubstring('bc', 'abcd', NumberInt(1), NumberLong(2));
+assertSubstring('bc', 'abcd', NumberLong(1), NumberInt(2));
// Integer component is used.
assertSubstring('bc', 'abcd', 1.2, 2.2);
assertSubstring('bc', 'abcd', 1.9, 2.9);
@@ -137,4 +133,3 @@ assert.eq(
})
.toArray()[0]
.a);
-}());
diff --git a/src/mongo/db/pipeline/expression.cpp b/src/mongo/db/pipeline/expression.cpp
index f1f55f6d4d3..80400576bf0 100644
--- a/src/mongo/db/pipeline/expression.cpp
+++ b/src/mongo/db/pipeline/expression.cpp
@@ -4472,11 +4472,13 @@ Value ExpressionSubstrBytes::evaluate(const Document& root, Variables* variables
str::stream() << getOpName()
<< ": starting index must be a numeric type (is BSON type "
<< typeName(pLower.getType()) << ")",
- pLower.numeric());
+ (pLower.getType() == NumberInt || pLower.getType() == NumberLong ||
+ pLower.getType() == NumberDouble));
uassert(16035,
str::stream() << getOpName() << ": length must be a numeric type (is BSON type "
<< typeName(pLength.getType()) << ")",
- pLength.numeric());
+ (pLength.getType() == NumberInt || pLength.getType() == NumberLong ||
+ pLength.getType() == NumberDouble));
const long long signedLower = pLower.coerceToLong();