首页 > 解决方案 > 使用 mongotemplate 的多个条件或运算符

问题描述

在此处输入图像描述我制作了一个带有 2 个输入的过滤器。 在此处输入图像描述 阵列状态 APPROVE 或 APPROVE 的第一个输入。第二个输入是基于 sku 或标题或描述的文本。我使用这个查询。如果我在邮递员中传递参数,则第一个输入数组状态正在工作。但如果我还通过第二个输入文本是错误“由于 com.mongodb.BasicDocument 的限制,您不能添加第二个 'null' 条件。查询已经包含 '{ "$or" : [{ "status" :“不批准”},{“状态”:“批准”}] }'”

Query query = new Query().with(pageable);
        
if (searchCriteria.getStatus() != null) {

    if (searchCriteria.getStatus().length == 1) {                    
        query.addCriteria(Criteria.where("status").is(searchCriteria.getStatus()[0]));
    } else {
        query.addCriteria(new Criteria().orOperator(
            Criteria.where("status").is(searchCriteria.getStatus()[0]),
            Criteria.where("status").is(searchCriteria.getStatus()[1])));
    }
}
    
if (searchCriteria.getText() != null) {
    
    query.addCriteria( new Criteria()
        .orOperator(
            Criteria.where("title").regex(searchCriteria.getText(), "i"),
            Criteria.where("description").regex(searchCriteria.getText(), "i"),
            Criteria.where("item.sku").is(searchCriteria.getText())
        ));
}

标签: mongodbspring-bootmongotemplate

解决方案


您不能同时使用Or这两个字段,您需要使用In. 例如query.addCriteria(Criteria.where("status").in(<YOUR_ARRAY>))


推荐阅读