diff --git a/pom.xml b/pom.xml
index a43bf9aba2..68add961af 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 3.4.3-SNAPSHOT
+ 3.4.x-GH-4123-SNAPSHOT
pom
Spring Data MongoDB
diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml
index f24a3e50df..e83bcf09bc 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
- 3.4.3-SNAPSHOT
+ 3.4.x-GH-4123-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index 6795167821..03944b6c6f 100644
--- a/spring-data-mongodb-distribution/pom.xml
+++ b/spring-data-mongodb-distribution/pom.xml
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-mongodb-parent
- 3.4.3-SNAPSHOT
+ 3.4.x-GH-4123-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index 8db4d2d243..3bacf4c405 100644
--- a/spring-data-mongodb/pom.xml
+++ b/spring-data-mongodb/pom.xml
@@ -11,7 +11,7 @@
org.springframework.data
spring-data-mongodb-parent
- 3.4.3-SNAPSHOT
+ 3.4.x-GH-4123-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Fields.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Fields.java
index e5150a3e35..3151ccbd05 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Fields.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Fields.java
@@ -267,7 +267,7 @@ public String getName() {
*/
public String getTarget() {
- if (isLocalVar()) {
+ if (isLocalVar() || pointsToDBRefId()) {
return this.getRaw();
}
@@ -296,6 +296,10 @@ public boolean isLocalVar() {
return raw.startsWith("$$") && !raw.startsWith("$$$");
}
+ protected boolean pointsToDBRefId() { // see https://jira.mongodb.org/browse/SERVER-14466
+ return raw.endsWith(".$id");
+ }
+
/**
* @return
* @since 1.10
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/FieldsUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/FieldsUnitTests.java
index d3408226a2..fe82768b8b 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/FieldsUnitTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/FieldsUnitTests.java
@@ -117,6 +117,13 @@ public void stripsLeadingDollarsFromTarget() {
assertThat(Fields.field("$$$$target").getTarget()).isEqualTo("target");
}
+ @Test // GH-4123
+ public void keepsRawMappingToDbRefId() {
+
+ assertThat(Fields.field("$id").getName()).isEqualTo("id");
+ assertThat(Fields.field("person.$id").getTarget()).isEqualTo("person.$id");
+ }
+
private static void verify(Field field, String name, String target) {
assertThat(field).isNotNull();