Skip to content

Commit ed12298

Browse files
committed
DATAMONGO-788 - Polishing.
Slightly changed the way the the simple reference rendering for projections is implemented. Introduced an isAliased() method on Field to be able to determine whether the field reference has been renamed explicitly. Original pull request: spring-projects#90.
1 parent 6827983 commit ed12298

File tree

6 files changed

+29
-12
lines changed

6 files changed

+29
-12
lines changed

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,15 @@ public String getTarget() {
259259
return field.getTarget();
260260
}
261261

262+
/*
263+
* (non-Javadoc)
264+
* @see org.springframework.data.mongodb.core.aggregation.Field#isAliased()
265+
*/
266+
@Override
267+
public boolean isAliased() {
268+
return field.isAliased();
269+
}
270+
262271
/**
263272
* Returns whether the field can be referred to using the given name.
264273
*
@@ -349,7 +358,6 @@ public boolean isSynthetic() {
349358
public String getRaw() {
350359

351360
String target = field.getTarget();
352-
353361
return field.synthetic ? target : String.format("%s.%s", Fields.UNDERSCORE_ID, target);
354362
}
355363

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,11 @@ public interface Field {
3636
* @return must not be {@literal null}.
3737
*/
3838
String getTarget();
39+
40+
/**
41+
* Returns whether the Field is aliased, which means it has a name set different from the target.
42+
*
43+
* @return
44+
*/
45+
boolean isAliased();
3946
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,15 @@ public String getTarget() {
237237
return StringUtils.hasText(this.target) ? this.target : this.name;
238238
}
239239

240+
/*
241+
* (non-Javadoc)
242+
* @see org.springframework.data.mongodb.core.aggregation.Field#isAliased()
243+
*/
244+
@Override
245+
public boolean isAliased() {
246+
return !getName().equals(getTarget());
247+
}
248+
240249
/*
241250
* (non-Javadoc)
242251
* @see java.lang.Object#toString()

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -627,15 +627,8 @@ private Object renderFieldValue(AggregationOperationContext context) {
627627

628628
// check whether referenced field exists in the context
629629
FieldReference reference = context.getReference(field.getTarget());
630+
return reference.isSynthetic() && !field.isAliased() ? 1 : reference.toString();
630631

631-
if (field.getName().equals(field.getTarget()) && reference.isSynthetic()) {
632-
633-
// render field as included
634-
return 1;
635-
}
636-
637-
// render field reference
638-
return reference.toString();
639632
} else if (Boolean.FALSE.equals(value)) {
640633

641634
// render field as excluded

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public void referencesToGroupIdsShouldBeRenderedAsReferences() {
117117
@SuppressWarnings("unchecked")
118118
DBObject secondProjection = ((List<DBObject>) agg.get("pipeline")).get(2);
119119
DBObject fields = DBObjectTestUtils.getAsDBObject(secondProjection, "$project");
120-
assertThat((Integer) fields.get("aCnt"), is(1));
121-
assertThat((String) fields.get("a"), is("$_id.a"));
120+
assertThat(fields.get("aCnt"), is((Object) 1));
121+
assertThat(fields.get("a"), is((Object) "$_id.a"));
122122
}
123123
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public void alwaysUsesExplicitReference() {
6868
DBObject dbObject = operation.toDBObject(Aggregation.DEFAULT_CONTEXT);
6969
DBObject projectClause = DBObjectTestUtils.getAsDBObject(dbObject, PROJECT);
7070

71-
assertThat((Integer) projectClause.get("foo"), is(1));
71+
assertThat(projectClause.get("foo"), is((Object) 1));
7272
assertThat(projectClause.get("bar"), is((Object) "$foobar"));
7373
}
7474

0 commit comments

Comments
 (0)