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 55a12a434..a25328b09 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 @@ -1172,6 +1172,9 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, if (query.getSkip() > 0) { options.skip((int) query.getSkip()); } + if (StringUtils.hasText(query.getHint())) { + options.hint(Document.parse(query.getHint())); + } Document document = queryMapper.getMappedObject(query.getQueryObject(), Optional.ofNullable(entityClass).map(it -> mappingContext.getPersistentEntity(entityClass))); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java index 61221f8c2..2190cb334 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java @@ -932,6 +932,18 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { .isEqualTo(com.mongodb.client.model.Collation.builder().locale("fr").build()); } + @Test // DATAMONGO-2360 + public void countShouldApplyQueryHintIfPresent() { + + Document queryHint = new Document("age", 1); + template.count(new BasicQuery("{}").withHint(queryHint), AutogenerateableId.class); + + ArgumentCaptor options = ArgumentCaptor.forClass(CountOptions.class); + verify(collection).count(any(), options.capture()); + + assertThat(options.getValue().getHint()).isEqualTo(queryHint); + } + @Test // DATAMONGO-1733 public void appliesFieldsWhenInterfaceProjectionIsClosedAndQueryDoesNotDefineFields() {