From 313ffb54260a276d5ad43cd8e119e1b13ce69075 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 | 4 ++++ .../data/mongodb/core/MongoTemplateUnitTests.java | 12 ++++++++++++ 2 files changed, 16 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 d26ae5782..7d0345304 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 @@ -1130,6 +1130,10 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, CountOptions options = new CountOptions(); query.getCollation().map(Collation::toMongoCollation).ifPresent(options::collation); + 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 e1b83cc35..fb7b4ff9f 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 @@ -910,6 +910,18 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { is(equalTo(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() {