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:
committed by
Christoph Strobl
parent
f20a0f20c9
commit
f7202067a5
@@ -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)));
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user