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> {
*/ */
public String getTarget() { public String getTarget() {
if (isLocalVar()) { if (isLocalVar() || pointsToDBRefId()) {
return this.getRaw(); return this.getRaw();
} }
@ -296,6 +296,10 @@ public final class Fields implements Iterable<Field> {
return raw.startsWith("$$") && !raw.startsWith("$$$"); return raw.startsWith("$$") && !raw.startsWith("$$$");
} }
protected boolean pointsToDBRefId() { // see https://jira.mongodb.org/browse/SERVER-14466
return raw.endsWith(".$id");
}
/** /**
* @return * @return
* @since 1.10 * @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 {
assertThat(Fields.field("$$$$target").getTarget()).isEqualTo("target"); 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) { private static void verify(Field field, String name, String target) {
assertThat(field).isNotNull(); assertThat(field).isNotNull();

Loading…
Cancel
Save