From f0f61858080849b27bf6e94fbce2dd251bc4983f Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Tue, 20 Mar 2018 10:35:33 +0100 Subject: [PATCH] DATAMONGO-1893 - Allow exclusion of other fields than _id in aggregation $project. As of MongoDB 3.4 exclusion of fields other than _id is allowed so we removed the limitation in our code. Original pull request: #538. --- .../mongodb/core/aggregation/ProjectionOperation.java | 5 ----- .../core/aggregation/ProjectionOperationUnitTests.java | 9 ++++++--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ProjectionOperation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ProjectionOperation.java index baf44ceca..8391a6d4b 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ProjectionOperation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ProjectionOperation.java @@ -140,11 +140,6 @@ public class ProjectionOperation implements FieldsExposingAggregationOperation { */ public ProjectionOperation andExclude(String... fieldNames) { - for (String fieldName : fieldNames) { - Assert.isTrue(Fields.UNDERSCORE_ID.equals(fieldName), - String.format(EXCLUSION_ERROR, fieldName, Fields.UNDERSCORE_ID)); - } - List excludeProjections = FieldProjection.from(Fields.fields(fieldNames), false); return new ProjectionOperation(this.projections, excludeProjections); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/ProjectionOperationUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/ProjectionOperationUnitTests.java index 00830a953..1807d4283 100755 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/ProjectionOperationUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/ProjectionOperationUnitTests.java @@ -200,10 +200,13 @@ public class ProjectionOperationUnitTests { assertThat(oper.get(MOD)).isEqualTo((Object) Arrays. asList("$a", 3)); } - @Test(expected = IllegalArgumentException.class) // DATAMONGO-758 - public void excludeShouldThrowExceptionForFieldsOtherThanUnderscoreId() { + @Test // DATAMONGO-758, DATAMONGO-1893 + public void excludeShouldAllowExclusionOfFieldsOtherThanUnderscoreId/* since MongoDB 3.4 */() { - new ProjectionOperation().andExclude("foo"); + ProjectionOperation projectionOp = new ProjectionOperation().andExclude("foo"); + Document document = projectionOp.toDocument(Aggregation.DEFAULT_CONTEXT); + Document projectClause = DocumentTestUtils.getAsDocument(document, PROJECT); + assertThat((Integer) projectClause.get("foo")).isEqualTo(0); } @Test // DATAMONGO-758