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: #90.
This commit is contained in:
@@ -259,6 +259,15 @@ public class ExposedFields implements Iterable<ExposedField> {
|
||||
return field.getTarget();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.data.mongodb.core.aggregation.Field#isAliased()
|
||||
*/
|
||||
@Override
|
||||
public boolean isAliased() {
|
||||
return field.isAliased();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the field can be referred to using the given name.
|
||||
*
|
||||
@@ -349,7 +358,6 @@ public class ExposedFields implements Iterable<ExposedField> {
|
||||
public String getRaw() {
|
||||
|
||||
String target = field.getTarget();
|
||||
|
||||
return field.synthetic ? target : String.format("%s.%s", Fields.UNDERSCORE_ID, target);
|
||||
}
|
||||
|
||||
|
||||
@@ -36,4 +36,11 @@ public interface Field {
|
||||
* @return must not be {@literal null}.
|
||||
*/
|
||||
String getTarget();
|
||||
|
||||
/**
|
||||
* Returns whether the Field is aliased, which means it has a name set different from the target.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
boolean isAliased();
|
||||
}
|
||||
|
||||
@@ -237,6 +237,15 @@ public class Fields implements Iterable<Field> {
|
||||
return StringUtils.hasText(this.target) ? this.target : this.name;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.data.mongodb.core.aggregation.Field#isAliased()
|
||||
*/
|
||||
@Override
|
||||
public boolean isAliased() {
|
||||
return !getName().equals(getTarget());
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see java.lang.Object#toString()
|
||||
|
||||
@@ -627,15 +627,8 @@ public class ProjectionOperation implements FieldsExposingAggregationOperation {
|
||||
|
||||
// check whether referenced field exists in the context
|
||||
FieldReference reference = context.getReference(field.getTarget());
|
||||
return reference.isSynthetic() && !field.isAliased() ? 1 : reference.toString();
|
||||
|
||||
if (field.getName().equals(field.getTarget()) && reference.isSynthetic()) {
|
||||
|
||||
// render field as included
|
||||
return 1;
|
||||
}
|
||||
|
||||
// render field reference
|
||||
return reference.toString();
|
||||
} else if (Boolean.FALSE.equals(value)) {
|
||||
|
||||
// render field as excluded
|
||||
|
||||
@@ -117,7 +117,7 @@ public class AggregationUnitTests {
|
||||
@SuppressWarnings("unchecked")
|
||||
DBObject secondProjection = ((List<DBObject>) agg.get("pipeline")).get(2);
|
||||
DBObject fields = DBObjectTestUtils.getAsDBObject(secondProjection, "$project");
|
||||
assertThat((Integer) fields.get("aCnt"), is(1));
|
||||
assertThat((String) fields.get("a"), is("$_id.a"));
|
||||
assertThat(fields.get("aCnt"), is((Object) 1));
|
||||
assertThat(fields.get("a"), is((Object) "$_id.a"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ public class ProjectionOperationUnitTests {
|
||||
DBObject dbObject = operation.toDBObject(Aggregation.DEFAULT_CONTEXT);
|
||||
DBObject projectClause = DBObjectTestUtils.getAsDBObject(dbObject, PROJECT);
|
||||
|
||||
assertThat((Integer) projectClause.get("foo"), is(1));
|
||||
assertThat(projectClause.get("foo"), is((Object) 1));
|
||||
assertThat(projectClause.get("bar"), is((Object) "$foobar"));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user