From fdc8ad8580cb457cfec812d830adfee122b52894 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 4b3c56f90..bfb2fead2 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 287063219..c88926df4 100644 --- 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 @@ -207,10 +207,13 @@ public class ProjectionOperationUnitTests { assertThat(oper.get(MOD), is((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