From 9093f8d8aff872d7618774fa825ffe2577310f60 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Thu, 12 Sep 2019 10:01:17 +0200 Subject: [PATCH] DATAMONGO-2360 - Apply query hint to count queries. Original pull request: #788. --- .../data/mongodb/core/MongoTemplate.java | 3 +++ .../data/mongodb/core/MongoTemplateUnitTests.java | 12 ++++++++++++ 2 files changed, 15 insertions(+) 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() {