diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ArrayOperators.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ArrayOperators.java index 9d27a7e86..02b805d5e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ArrayOperators.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/aggregation/ArrayOperators.java @@ -350,19 +350,19 @@ public class ArrayOperators { } /** - * Creates new {@link AggregationExpression} that takes the associated array and sorts it by the given {@link Sort - * order}. + * Creates new {@link AggregationExpression} that takes the associated array and sorts it by the given + * {@link Direction order}. * * @return new instance of {@link SortArray}. - * @since 4.0 + * @since 4.5 */ public SortArray sort(Direction direction) { if (usesFieldRef()) { - return SortArray.sortArrayOf(fieldReference).by(direction); + return SortArray.sortArrayOf(fieldReference).direction(direction); } - return (usesExpression() ? SortArray.sortArrayOf(expression) : SortArray.sortArray(values)).by(direction); + return (usesExpression() ? SortArray.sortArrayOf(expression) : SortArray.sortArray(values)).direction(direction); } /** @@ -1998,10 +1998,6 @@ public class ArrayOperators { return new First(expression); } - /* - * (non-Javadoc) - * @see org.springframework.data.mongodb.core.aggregation.AbstractAggregationExpression#getMongoMethod() - */ @Override protected String getMongoMethod() { return "$first"; @@ -2052,10 +2048,6 @@ public class ArrayOperators { return new Last(expression); } - /* - * (non-Javadoc) - * @see org.springframework.data.mongodb.core.aggregation.AbstractAggregationExpression#getMongoMethod() - */ @Override protected String getMongoMethod() { return "$last"; @@ -2116,41 +2108,38 @@ public class ArrayOperators { } /** - * Sort the array elements by their values in ascending order. Suitable for arrays of simple types (e.g., integers, - * strings). + * Order the values for the array in the given direction. * + * @param direction must not be {@literal null}. * @return new instance of {@link SortArray}. - * @since 4.x (TBD) + * @since 4.5 */ - public SortArray byValueAscending() { - return new SortArray(append("sortBy", 1)); + public SortArray direction(Direction direction) { + return new SortArray(append("sortBy", direction.isAscending() ? 1 : -1)); } /** - * Sort the array elements by their values in descending order. Suitable for arrays of simple types (e.g., integers, + * Sort the array elements by their values in ascending order. Suitable for arrays of simple types (e.g., integers, * strings). * * @return new instance of {@link SortArray}. - * @since 4.x (TBD) + * @since 4.5 */ - public SortArray byValueDescending() { - return new SortArray(append("sortBy", -1)); + public SortArray byValueAscending() { + return direction(Direction.ASC); } /** - * Set the order to put elements in. + * Sort the array elements by their values in descending order. Suitable for arrays of simple types (e.g., integers, + * strings). * - * @param direction must not be {@literal null}. * @return new instance of {@link SortArray}. + * @since 4.5 */ - public SortArray by(Direction direction) { - return new SortArray(append("sortBy", direction.isAscending() ? 1 : -1)); + public SortArray byValueDescending() { + return direction(Direction.DESC); } - /* - * (non-Javadoc) - * @see org.springframework.data.mongodb.core.aggregation.AbstractAggregationExpression#getMongoMethod() - */ @Override protected String getMongoMethod() { return "$sortArray"; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/ArrayOperatorsUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/ArrayOperatorsUnitTests.java index 93ade364a..0ab5545f2 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/ArrayOperatorsUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/ArrayOperatorsUnitTests.java @@ -15,7 +15,7 @@ */ package org.springframework.data.mongodb.core.aggregation; -import static org.springframework.data.mongodb.test.util.Assertions.*; +import static org.springframework.data.mongodb.test.util.Assertions.assertThat; import java.util.ArrayList; import java.util.Arrays; @@ -26,7 +26,6 @@ import org.junit.jupiter.api.Test; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.mongodb.core.aggregation.ArrayOperators.ArrayToObject; -import org.springframework.data.mongodb.core.aggregation.ArrayOperators.SortArray; /** * Unit tests for {@link ArrayOperators} @@ -184,25 +183,16 @@ public class ArrayOperatorsUnitTests { @Test // GH-4929 public void sortArrayByValueAscending() { - Document result = SortArray.sortArrayOf("numbers").byValueAscending().toDocument(Aggregation.DEFAULT_CONTEXT); - Document expected = new Document("$sortArray", new Document("input", "$numbers").append("sortBy", 1)); - assertThat(result).isEqualTo(expected); + + Document result = ArrayOperators.arrayOf("numbers").sort(Direction.ASC).toDocument(Aggregation.DEFAULT_CONTEXT); + assertThat(result).isEqualTo("{ $sortArray: { input: '$numbers', sortBy: 1 } }"); } @Test // GH-4929 public void sortArrayByValueDescending() { - Document result = SortArray.sortArrayOf("numbers").byValueDescending().toDocument(Aggregation.DEFAULT_CONTEXT); - Document expected = new Document("$sortArray", new Document("input", "$numbers").append("sortBy", -1)); - assertThat(result).isEqualTo(expected); - } - @Test // GH-4929 - public void sortArrayByPropertyUnchanged() { - Document result = SortArray.sortArrayOf("items").by(Sort.by(Sort.Direction.ASC, "price")) - .toDocument(Aggregation.DEFAULT_CONTEXT); - Document expected = new Document("$sortArray", - new Document("input", "$items").append("sortBy", new Document("price", 1))); - assertThat(result).isEqualTo(expected); + Document result = ArrayOperators.arrayOf("numbers").sort(Direction.DESC).toDocument(Aggregation.DEFAULT_CONTEXT); + assertThat(result).isEqualTo("{ $sortArray: { input: '$numbers', sortBy: -1 } }"); } @Test // GH-4929