DATAMONGO-2360 - Polishing.

Apply index hints in ReactiveMongoTemplate.count(…).

Original pull request: #788.
This commit is contained in:
Mark Paluch
2019-09-19 14:41:07 +02:00
parent 313ffb5426
commit 9acc8d5268
3 changed files with 20 additions and 2 deletions

View File

@@ -1167,6 +1167,9 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati
if (query != null) {
query.getCollation().map(Collation::toMongoCollation).ifPresent(options::collation);
}
if (StringUtils.hasText(query.getHint())) {
options.hint(Document.parse(query.getHint()));
}
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Executing count: {} in collection: {}", serializeToJsonSafely(filter), collectionName);

View File

@@ -914,12 +914,12 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests {
public void countShouldApplyQueryHintIfPresent() {
Document queryHint = new Document("age", 1);
template.count(new BasicQuery("{}").withHint(queryHint), AutogenerateableId.class);
template.count(new BasicQuery("{}").withHint(queryHint.toJson()), AutogenerateableId.class);
ArgumentCaptor<CountOptions> options = ArgumentCaptor.forClass(CountOptions.class);
verify(collection).count(any(), options.capture());
assertThat(options.getValue().getHint()).isEqualTo(queryHint);
assertThat(options.getValue().getHint(), is(equalTo(queryHint)));
}
@Test // DATAMONGO-1733

View File

@@ -38,6 +38,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.reactivestreams.Publisher;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.MongoTemplateUnitTests.AutogenerateableId;
@@ -52,6 +53,7 @@ import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.test.util.ReflectionTestUtils;
import com.mongodb.client.model.CountOptions;
import com.mongodb.client.model.DeleteOptions;
import com.mongodb.client.model.FindOneAndDeleteOptions;
import com.mongodb.client.model.FindOneAndUpdateOptions;
@@ -343,6 +345,19 @@ public class ReactiveMongoTemplateUnitTests {
verify(findPublisher, never()).projection(any());
}
@Test // DATAMONGO-2360
public void countShouldApplyQueryHintIfPresent() {
when(collection.count(any(Bson.class), any(CountOptions.class))).thenReturn(Mono.empty());
Document queryHint = new Document("age", 1);
template.count(new Query().withHint(queryHint.toJson()), Person.class, "star-wars").subscribe();
ArgumentCaptor<CountOptions> options = ArgumentCaptor.forClass(CountOptions.class);
verify(collection).count(any(), options.capture());
assertThat(options.getValue().getHint(), is(equalTo(queryHint)));
}
@Data
@org.springframework.data.mongodb.core.mapping.Document(collection = "star-wars")
static class Person {