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 f2c4837f1..4fec00cf6 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 @@ -40,6 +40,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; @@ -2145,7 +2146,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati Flux 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))); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateTests.java index 7f67c69f8..653ad618a 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateTests.java @@ -55,6 +55,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; @@ -635,6 +636,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() {