DATAMONGO-2219 - Fix ReactiveMongoTemplate.findAllAndRemove(…) if the query yields no results.

ReactiveMongoTemplate.findAllAndRemove(…) now completes successfully without emitting a result if the find query yields no hits. We no longer call the subsequent remove query if without previous results.

Original Pull Request: #657
This commit is contained in:
Mark Paluch
2019-03-04 14:41:20 +01:00
committed by Christoph Strobl
parent f20a0f20c9
commit f7202067a5
2 changed files with 12 additions and 1 deletions

View File

@@ -41,6 +41,7 @@ import org.reactivestreams.Publisher;
import org.reactivestreams.Subscriber;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
@@ -2144,7 +2145,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati
Flux<T> flux = find(query, entityClass, collectionName);
return Flux.from(flux).collectList()
return Flux.from(flux).collectList().filter(it -> !it.isEmpty())
.flatMapMany(list -> Flux.from(remove(operations.getByIdInQuery(list), entityClass, collectionName))
.flatMap(deleteResult -> Flux.fromIterable(list)));
}

View File

@@ -54,6 +54,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.dao.DataIntegrityViolationException;
@@ -634,6 +635,15 @@ public class ReactiveMongoTemplateTests {
StepVerifier.create(template.findOne(new Query(), Sample.class)).expectNext(data).verifyComplete();
}
@Test // DATAMONGO-2219
public void testFindAllAndRemoveReturnsEmptyWithoutMatches() {
Query qry = query(where("field").in("spring", "mongodb"));
template.findAllAndRemove(qry, Sample.class).as(StepVerifier::create).verifyComplete();
template.count(new Query(), Sample.class).as(StepVerifier::create).expectNext(0L).verifyComplete();
}
@Test // DATAMONGO-1774
public void testFindAllAndRemoveByCollectionReturnsAndRemovesDocuments() {