Browse Source

Allow referencing the $id field of dbrefs within an aggregation pipeline.

Closes: #4123
Original pull request: #4125.
3.3.x
Christoph Strobl 3 years ago committed by Mark Paluch
parent
commit
cf38ba15bf
No known key found for this signature in database
GPG Key ID: 4406B84C1661DCD1
  1. 6
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Fields.java
  2. 7
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/FieldsUnitTests.java

6
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Fields.java

@ -267,7 +267,7 @@ public final class Fields implements Iterable<Field> { @@ -267,7 +267,7 @@ public final class Fields implements Iterable<Field> {
*/
public String getTarget() {
if (isLocalVar()) {
if (isLocalVar() || pointsToDBRefId()) {
return this.getRaw();
}
@ -296,6 +296,10 @@ public final class Fields implements Iterable<Field> { @@ -296,6 +296,10 @@ public final class Fields implements Iterable<Field> {
return raw.startsWith("$$") && !raw.startsWith("$$$");
}
protected boolean pointsToDBRefId() { // see https://jira.mongodb.org/browse/SERVER-14466
return raw.endsWith(".$id");
}
/**
* @return
* @since 1.10

7
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/FieldsUnitTests.java

@ -117,6 +117,13 @@ public class FieldsUnitTests { @@ -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();

Loading…
Cancel
Save