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 33bf89e970..4f36eb2d65 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 @@ -865,7 +865,8 @@ public List find(Query query, Class entityClass, String collectionName Assert.notNull(collectionName, "CollectionName must not be null"); Assert.notNull(entityClass, "EntityClass must not be null"); - return doFind(collectionName, createDelegate(query), query.getQueryObject(), query.getFieldsObject(), entityClass, + return doFind(collectionName, createDelegate(query), query.getQueryObject(), query.getFieldsObject(), + query.getSortObject(), entityClass, new QueryCursorPreparer(query, entityClass)); } @@ -899,14 +900,15 @@ Window doScroll(Query query, Class sourceClass, Class targetClass, operations.getIdPropertyName(sourceClass)); List result = doFind(collectionName, createDelegate(query), keysetPaginationQuery.query(), - keysetPaginationQuery.fields(), sourceClass, + keysetPaginationQuery.fields(), keysetPaginationQuery.sort(), sourceClass, new QueryCursorPreparer(query, keysetPaginationQuery.sort(), limit, 0, sourceClass), callback); return ScrollUtils.createWindow(query, result, sourceClass, operations); } List result = doFind(collectionName, createDelegate(query), query.getQueryObject(), query.getFieldsObject(), - sourceClass, new QueryCursorPreparer(query, query.getSortObject(), limit, query.getSkip(), sourceClass), + query.getSortObject(), sourceClass, + new QueryCursorPreparer(query, query.getSortObject(), limit, query.getSkip(), sourceClass), callback); return ScrollUtils.createWindow(result, query.getLimit(), OffsetScrollPosition.positionFunction(query.getSkip())); @@ -2559,8 +2561,8 @@ protected T doFindOne(String collectionName, CollectionPreparer List doFind(String collectionName, CollectionPreparer> collectionPreparer, - Document query, Document fields, Class entityClass) { - return doFind(collectionName, collectionPreparer, query, fields, entityClass, null, + Document query, Document fields, Document sort, Class entityClass) { + return doFind(collectionName, collectionPreparer, query, fields, sort, entityClass, null, new ReadDocumentCallback<>(this.mongoConverter, entityClass, collectionName)); } @@ -2579,21 +2581,21 @@ protected List doFind(String collectionName, CollectionPreparer List doFind(String collectionName, CollectionPreparer> collectionPreparer, - Document query, Document fields, Class entityClass, CursorPreparer preparer) { - return doFind(collectionName, collectionPreparer, query, fields, entityClass, preparer, + Document query, Document fields, Document sort, Class entityClass, CursorPreparer preparer) { + return doFind(collectionName, collectionPreparer, query, fields, sort, entityClass, preparer, new ReadDocumentCallback<>(mongoConverter, entityClass, collectionName)); } protected List doFind(String collectionName, CollectionPreparer> collectionPreparer, Document query, Document fields, - Class entityClass, @Nullable CursorPreparer preparer, DocumentCallback objectCallback) { + Document sort, Class entityClass, @Nullable CursorPreparer preparer, DocumentCallback objectCallback) { MongoPersistentEntity entity = mappingContext.getPersistentEntity(entityClass); QueryContext queryContext = queryOperations.createQueryContext(new BasicQuery(query, fields)); Document mappedFields = queryContext.getMappedFields(entity, EntityProjection.nonProjecting(entityClass)); Document mappedQuery = queryContext.getMappedQuery(entity); - Document mappedSort = getMappedSortObject(query, entityClass); + Document mappedSort = getMappedSortObject(sort, entityClass); if (LOGGER.isDebugEnabled()) { LOGGER.debug(String.format("find using query: %s fields: %s sort: %s for class: %s in collection: %s",