Spring Data Mongo:如何通过可选属性过滤文档?

问题描述 投票:-1回答:1

[已经存储在Mongo数据库中的一些文档:

{
"companyName": "Google",
"departmentName": "Sales"
},
{
"companyName": "Google",
"departmentName": "HR"
},
{
"companyName": "Amazon",
"departmentName": "Marketing"
}

我需要实现一个方法,该方法将接收2个属性:companyNamedepartmentName其中一个可以是可选的,并将返回找到的文档列表,例如:

[departmentNamenullcompanyNameGoogle时,方法返回2个文档:

{
"companyName": "Google",
"departmentName": "Sales"
},
{
"companyName": "Google",
"departmentName": "HR"
}

[当companyNamenulldepartmentNameMarketing时,仅返回一个文档:

 {
"companyName": "Amazon",
"departmentName": "Marketing"
}

我试图以各种方式实现它,但没有人符合我的需求:

public interface CompanyRepository extends ReactiveMongoRepository<Company, String> {

  Flux<Company> findByCompanyNameAndDepartmentName(String companyName, String departmentName);

}

companyNamedepartmentNamenull时返回0个结果。

选项2:

Company company = Company.builder()
    .companyName(null)
    .departmentName("Marketing")
    .build();

repository.findAll(Example.of(company))
    .subscribe(System.out::println);

还会打印0个结果,但我希望看到一个文档。

所以,请提出建议以实施适当的搜索?

spring mongodb spring-data reactive-programming spring-data-mongodb
1个回答
-1
投票

您可以尝试使用以下存储库界面:

public interface CompanyRepository extends ReactiveMongoRepository<Company, String> {

  Flux<Company> findByCompanyNameOrDepartmentName(String companyName, String departmentName);

}

更改是JPA方法名称从findByCompanyNameAndDepartmentName更改为findByCompanyNameOrDepartmentName。因为如果任何字段与您的输入匹配,您就需要结果。

参考:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation

© www.soinside.com 2019 - 2024. All rights reserved.