问题描述
我有一个很大的MongoDB文档,其中包含各个字段。
在应用给定的过滤器后,我需要向客户提供所有文档。过滤器可以是firstName == name
,但也可以是jobType in {PROGRAMMER,DESIGNER}
目前,我正在检查filter != null
是否正确,是否正在应用query.addCriteria(...)
是否有更简洁的方法?
解决方法
是的,这看起来像是战略模式的理想用例。基本上,您将创建一个接口FilterCriterion,并为要添加过滤器的每个可能的字段实现该接口。
示例:
public interface FilterCriterion{
Boolean isApplicable(DummyObject dummyObject);
Criteria getCriteria(DummyObject dummyObject);
}
public class NameFilter implements FilterCriterion{
@Override
public boolean isApplicable(DummyObject dummyObject){
return Objects.nonNull(dummyObject.firstName);
}
@Override
public Criteria getCriteria(DummyObject dummyObject){
return Criteria.where("firstName").is(dummyObject.firstName);
}
}
自动装配接口会给出一个实现bean列表,在该服务中,您可以使用以下条件收集条件
Criteria criteria = new Criteria();
criteria.andOperator(criteria1,criteria2...);