diff --git a/pom.xml b/pom.xml
index 6c28d06495..df0cbabc72 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.4.0-SNAPSHOT
+ 4.4.0-GH-4806-SNAPSHOT
pom
Spring Data MongoDB
diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml
index a3dc49f892..5bfa2e4366 100644
--- a/spring-data-mongodb-benchmarks/pom.xml
+++ b/spring-data-mongodb-benchmarks/pom.xml
@@ -7,7 +7,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.4.0-SNAPSHOT
+ 4.4.0-GH-4806-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index acdc13437d..f7817170ea 100644
--- a/spring-data-mongodb-distribution/pom.xml
+++ b/spring-data-mongodb-distribution/pom.xml
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.4.0-SNAPSHOT
+ 4.4.0-GH-4806-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index 066f463015..26c891512a 100644
--- a/spring-data-mongodb/pom.xml
+++ b/spring-data-mongodb/pom.xml
@@ -13,7 +13,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.4.0-SNAPSHOT
+ 4.4.0-GH-4806-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReader.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReader.java
index 2d1d939242..84f1e5943b 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReader.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReader.java
@@ -461,7 +461,9 @@ private BindableValue bindableValueFor(JsonToken token) {
if (isRegularExpression) {
- bindableValue.setValue(new BsonRegularExpression(computedValue));
+ BsonRegularExpression originalExpression = token.getValue(BsonRegularExpression.class);
+
+ bindableValue.setValue(new BsonRegularExpression(computedValue, originalExpression.getOptions()));
bindableValue.setType(BsonType.REGULAR_EXPRESSION);
} else {
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReaderUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReaderUnitTests.java
index 646f813481..2b940e6cb6 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReaderUnitTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReaderUnitTests.java
@@ -26,12 +26,12 @@
import org.bson.BsonBinary;
import org.bson.BsonBinarySubType;
+import org.bson.BsonRegularExpression;
import org.bson.Document;
import org.bson.codecs.DecoderContext;
import org.junit.jupiter.api.Test;
import org.springframework.data.expression.ValueExpressionParser;
-import org.springframework.data.mapping.model.ValueExpressionEvaluator;
import org.springframework.data.spel.EvaluationContextProvider;
import org.springframework.data.spel.ExpressionDependencies;
import org.springframework.expression.EvaluationContext;
@@ -84,6 +84,26 @@ void bindQuotedIntegerValue() {
assertThat(target).isEqualTo(new Document("lastname", "100"));
}
+ @Test // GH-4806
+ void regexConsidersOptions() {
+
+ Document target = parse("{ 'c': /^true$/i }");
+
+ BsonRegularExpression pattern = target.get("c", BsonRegularExpression.class);
+ assertThat(pattern.getPattern()).isEqualTo("^true$");
+ assertThat(pattern.getOptions()).isEqualTo("i");
+ }
+
+ @Test // GH-4806
+ void regexConsidersBindValueWithOptions() {
+
+ Document target = parse("{ 'c': /^?0$/i }", "foo");
+
+ BsonRegularExpression pattern = target.get("c", BsonRegularExpression.class);
+ assertThat(pattern.getPattern()).isEqualTo("^foo$");
+ assertThat(pattern.getOptions()).isEqualTo("i");
+ }
+
@Test
void bindValueToRegex() {