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 e5150a3e3..3151ccbd0 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 final class Fields implements Iterable { */ public String getTarget() { - if (isLocalVar()) { + if (isLocalVar() || pointsToDBRefId()) { return this.getRaw(); } @@ -296,6 +296,10 @@ public final class Fields implements Iterable { 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 d3408226a..fe82768b8 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 class FieldsUnitTests { 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();