如何构建复杂的MongoDB查询?

问题描述

我有一个很大的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...);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...