diff --git a/pom.xml b/pom.xml
index ded4d85d02..f86b5f6ff2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.5.0-SNAPSHOT
+ 4.5.x-GH-4860-SNAPSHOT
pom
Spring Data MongoDB
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index 58c63dfc97..08b6e4eb50 100644
--- a/spring-data-mongodb-distribution/pom.xml
+++ b/spring-data-mongodb-distribution/pom.xml
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.5.0-SNAPSHOT
+ 4.5.x-GH-4860-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index 98516a5ba9..6407dc63d1 100644
--- a/spring-data-mongodb/pom.xml
+++ b/spring-data-mongodb/pom.xml
@@ -13,7 +13,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.5.0-SNAPSHOT
+ 4.5.x-GH-4860-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableFindOperationSupport.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableFindOperationSupport.java
index 17ee0dc55a..42bce7b398 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableFindOperationSupport.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ExecutableFindOperationSupport.java
@@ -205,7 +205,7 @@ private String asString() {
* @author Christoph Strobl
* @since 2.0
*/
- static class DelegatingQueryCursorPreparer implements CursorPreparer {
+ static class DelegatingQueryCursorPreparer implements SortingQueryCursorPreparer {
private final @Nullable CursorPreparer delegate;
private Optional limit = Optional.empty();
@@ -231,6 +231,11 @@ CursorPreparer limit(int limit) {
public ReadPreference getReadPreference() {
return delegate.getReadPreference();
}
+
+ @Override
+ public Document getSortObject() {
+ return delegate instanceof SortingQueryCursorPreparer sqcp ? sqcp.getSortObject() : null;
+ }
}
/**
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java
index b984c379c6..e8e6f7c9e9 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java
@@ -2596,7 +2596,7 @@ protected List doFind(String collectionName,
if (LOGGER.isDebugEnabled()) {
- Document mappedSort = getMappedSortObject(query, entityClass);
+ Document mappedSort = preparer instanceof SortingQueryCursorPreparer sqcp ? getMappedSortObject(sqcp.getSortObject(), entity) : null;
LOGGER.debug(String.format("find using query: %s fields: %s sort: %s for class: %s in collection: %s",
serializeToJsonSafely(mappedQuery), mappedFields, serializeToJsonSafely(mappedSort), entityClass,
collectionName));
@@ -2621,9 +2621,10 @@ List doFind(CollectionPreparer> collectionPr
QueryContext queryContext = queryOperations.createQueryContext(new BasicQuery(query, fields));
Document mappedFields = queryContext.getMappedFields(entity, projection);
Document mappedQuery = queryContext.getMappedQuery(entity);
- Document mappedSort = getMappedSortObject(query, sourceClass);
if (LOGGER.isDebugEnabled()) {
+
+ Document mappedSort = preparer instanceof SortingQueryCursorPreparer sqcp ? getMappedSortObject(sqcp.getSortObject(), sourceClass) : null;
LOGGER.debug(String.format("find using query: %s fields: %s sort: %s for class: %s in collection: %s",
serializeToJsonSafely(mappedQuery), mappedFields, serializeToJsonSafely(mappedSort), sourceClass,
collectionName));
@@ -2988,12 +2989,17 @@ private Document getMappedSortObject(@Nullable Query query, Class> type) {
@Nullable
private Document getMappedSortObject(Document sortObject, Class> type) {
+ return getMappedSortObject(sortObject, mappingContext.getPersistentEntity(type));
+ }
+
+ @Nullable
+ private Document getMappedSortObject(Document sortObject, MongoPersistentEntity> entity) {
if (ObjectUtils.isEmpty(sortObject)) {
return null;
}
- return queryMapper.getMappedSort(sortObject, mappingContext.getPersistentEntity(type));
+ return queryMapper.getMappedSort(sortObject, entity);
}
/**
@@ -3346,7 +3352,7 @@ public T doWith(Document document) {
}
}
- class QueryCursorPreparer implements CursorPreparer {
+ class QueryCursorPreparer implements SortingQueryCursorPreparer {
private final Query query;
@@ -3444,6 +3450,11 @@ public FindIterable prepare(FindIterable iterable) {
return cursorToUse;
}
+ @Nullable
+ @Override
+ public Document getSortObject() {
+ return sortObject;
+ }
}
/**
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/SortingQueryCursorPreparer.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/SortingQueryCursorPreparer.java
new file mode 100644
index 0000000000..3cefe2b3ce
--- /dev/null
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/SortingQueryCursorPreparer.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2025 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.data.mongodb.core;
+
+import org.bson.Document;
+import org.springframework.lang.Nullable;
+
+/**
+ * @author Christoph Strobl
+ */
+interface SortingQueryCursorPreparer extends CursorPreparer {
+
+ @Nullable
+ Document getSortObject();
+}