Skip to content

Commit 234783f

Browse files
christophstroblmp911de
authored andcommitted
Allow referencing the $id field of dbrefs within an aggregation pipeline.
Closes: #4123 Original pull request: #4125.
1 parent 3429350 commit 234783f

File tree

2 files changed

+12
-1
lines changed
  • spring-data-mongodb/src

2 files changed

+12
-1
lines changed

Diff for: spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/Fields.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ public String getName() {
255255

256256
public String getTarget() {
257257

258-
if (isLocalVar()) {
258+
if (isLocalVar() || pointsToDBRefId()) {
259259
return this.getRaw();
260260
}
261261

@@ -280,6 +280,10 @@ public boolean isLocalVar() {
280280
return raw.startsWith("$$") && !raw.startsWith("$$$");
281281
}
282282

283+
protected boolean pointsToDBRefId() { // see https://jira.mongodb.org/browse/SERVER-14466
284+
return raw.endsWith(".$id");
285+
}
286+
283287
/**
284288
* @return
285289
* @since 1.10

Diff for: spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/FieldsUnitTests.java

+7
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,13 @@ public void stripsLeadingDollarsFromTarget() {
117117
assertThat(Fields.field("$$$$target").getTarget()).isEqualTo("target");
118118
}
119119

120+
@Test // GH-4123
121+
public void keepsRawMappingToDbRefId() {
122+
123+
assertThat(Fields.field("$id").getName()).isEqualTo("id");
124+
assertThat(Fields.field("person.$id").getTarget()).isEqualTo("person.$id");
125+
}
126+
120127
private static void verify(Field field, String name, String target) {
121128

122129
assertThat(field).isNotNull();

0 commit comments

Comments
 (0)