首页 > 解决方案 > 使用reactivemongodb查询mongodb集合SpringWebFlux

问题描述

我正在使用响应式 mongodb 开发简单的 spring webflux 演示应用程序,我想按名称读取 Employee 的所有数据,除了包含名称字段“joe”、“Sara”、“JOE”、“SARA”,我有以下代码:

//存储接口

public interface EmployeeRepository extends ReactiveMongoRepository<Employee, String>{
 Flux<Employee> findAllByName(String name);
}

//服务类

public class EmplyeeService
{

private EmployeeRepository employeeRepository;

public Flux<Employee> findAllByOrganizationName(String name)
 {

        return employeeRepository.findAllByName(name);

    }

 public Flux<String> getAllNameExceptSome(String name)
{
     Employee emp1=new Employee();
     List<Flux<Employee>> emp=Arrays.asList(employeeRepository.findAllByName(name));
     Flux<Flux<Employee>> emp2=Flux.fromIterable(emp)
             .filter(name->name.equalsIgnoreCase("joe"));
     return emp2;
  }
}

标签: spring-bootspring-webflux

解决方案


首先,除非某些特殊情况,否则应该避免使用这些数据结构:

List<Flux<Employee>>
Flux<Flux<Employee>>

但是,您没有利用 Spring Data。您只需将存储库更改为:

public interface EmployeeRepository extends ReactiveMongoRepository<Employee, String> {

   // this find all Employee except those matching names provided as param
   Flux<Employee> findAllByNameNotIn(List<String> nameList);

   // this find all Employee matching names provided as param
   Flux<Employee> findAllByNameIn(List<String> nameList);
}

调用此方法,您将获得已按名称过滤的 Employee 列表。


推荐阅读