Skip to content

Commit 55cfe72

Browse files
authored
Merge pull request #241 from jmarkerink/feat/isNumber-type-operator
feat: added isNumber expression type operator
2 parents 3a75078 + 208da58 commit 55cfe72

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

core/src/main/java/de/bwaldvogel/mongo/backend/aggregation/Expression.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import de.bwaldvogel.mongo.backend.NumericUtils;
4444
import de.bwaldvogel.mongo.backend.Utils;
4545
import de.bwaldvogel.mongo.backend.ValueComparator;
46+
import de.bwaldvogel.mongo.bson.Decimal128;
4647
import de.bwaldvogel.mongo.bson.Document;
4748
import de.bwaldvogel.mongo.bson.ObjectId;
4849
import de.bwaldvogel.mongo.exception.BadValueException;
@@ -772,6 +773,17 @@ Object apply(List<?> expressionValue, Document document) {
772773
}
773774
},
774775

776+
$isNumber {
777+
@Override
778+
Boolean apply(List<?> expressionValue, Document document) {
779+
Object value = requireSingleValue(expressionValue);
780+
return (value instanceof Integer ||
781+
value instanceof Decimal128 ||
782+
value instanceof Double ||
783+
value instanceof Long);
784+
}
785+
},
786+
775787
$literal {
776788
@Override
777789
Object apply(Object expressionValue, Document document) {

core/src/test/java/de/bwaldvogel/mongo/backend/aggregation/ExpressionTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1781,6 +1781,18 @@ void testEvaluateIsArray() throws Exception {
17811781
.withMessage("[Error 16020] Expression $isArray takes exactly 1 arguments. 2 were passed in.");
17821782
}
17831783

1784+
@Test
1785+
void testEvaluateIsNumber() throws Exception {
1786+
assertThat(Expression.evaluate(json("$isNumber: ['hello']"), json(""))).isEqualTo(false);
1787+
assertThat(Expression.evaluate(json("$isNumber: 'pi'}"), json(""))).isEqualTo(false);
1788+
assertThat(Expression.evaluate(json("$isNumber: null"), json(""))).isEqualTo(false);
1789+
assertThat(Expression.evaluate(json("$isNumber: '$value'"), json("value: 'a'"))).isEqualTo(false);
1790+
assertThat(Expression.evaluate(json("$isNumber: '$value'"), json("value: ['abc']"))).isEqualTo(false);
1791+
assertThat(Expression.evaluate(json("$isNumber: '$value'"), json("value: 1"))).isEqualTo(true);
1792+
assertThat(Expression.evaluate(json("$isNumber: '$value'"), json("value: 2.0"))).isEqualTo(true);
1793+
assertThat(Expression.evaluate(json("$isNumber: '$value'"), json("value: 3.141592653589793"))).isEqualTo(true);
1794+
}
1795+
17841796
@Test
17851797
void testEvaluateLiteral() throws Exception {
17861798
assertThat(Expression.evaluate(json("$literal: {$add: [2, 3]}"), json(""))).isEqualTo(json("$add: [2, 3]"));

0 commit comments

Comments
 (0)