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