From 004e8ba0ea1d4cb1d6dcd52e7237143f553cac89 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 19 Sep 2019 14:41:07 +0200 Subject: [PATCH] DATAMONGO-2360 - Polishing. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apply index hints in ReactiveMongoTemplate.count(…). Original pull request: #788. --- .../data/mongodb/core/ReactiveMongoTemplate.java | 3 +++ .../mongodb/core/ReactiveMongoTemplateUnitTests.java | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java index f445c1eae..22a10dbdb 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java @@ -1275,6 +1275,9 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati if (query.getSkip() > 0) { options.skip((int) query.getSkip()); } + if (StringUtils.hasText(query.getHint())) { + options.hint(Document.parse(query.getHint())); + } operations.forType(entityClass).getCollation(query).map(Collation::toMongoCollation) // .ifPresent(options::collation); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateUnitTests.java index d42e759e7..2daed014b 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateUnitTests.java @@ -407,6 +407,18 @@ public class ReactiveMongoTemplateUnitTests { assertThat(options.getValue().getLimit()).isEqualTo(100); } + @Test // DATAMONGO-2360 + public void countShouldApplyQueryHintIfPresent() { + + Document queryHint = new Document("age", 1); + template.count(new Query().withHint(queryHint), Person.class, "star-wars").subscribe(); + + ArgumentCaptor options = ArgumentCaptor.forClass(CountOptions.class); + verify(collection).count(any(), options.capture()); + + assertThat(options.getValue().getHint()).isEqualTo(queryHint); + } + @Test // DATAMONGO-2215 public void updateShouldApplyArrayFilters() {