From 9dee60af151ceb1a46c3d665b959b48ea3a0947b Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Fri, 11 Apr 2025 14:03:37 +0200 Subject: [PATCH] Polishing. Update test, since tags, rename method. Original Pull Requests: #4935 & #4943 --- .../core/aggregation/ArrayOperators.java | 49 +++++++------------ .../aggregation/ArrayOperatorsUnitTests.java | 22 +++------ 2 files changed, 25 insertions(+), 46 deletions(-) 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 ae2a32ffa..a8cb58d17 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 @@ -338,19 +338,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); } /** @@ -1960,10 +1960,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"; @@ -2014,10 +2010,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"; @@ -2077,41 +2069,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