David Anwar
David Anwar

Reputation: 25

Multiple criteria orOperator using mongotemplate

enter image description hereI make a filter with 2 input. enter image description here The first input for array status APPROVE or APPROVE. The second input is text based on sku or title, or description. I use this query. If i pass paramter in postman the first input array status is working. but if i also pass the second input text is error "Due to limitations of the com.mongodb.BasicDocument, you can't add a second 'null' criteria. Query already contains '{ "$or" : [{ "status" : "UNAPPROVE" }, { "status" : "APPROVE" }] }'"

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())
        ));
}

Upvotes: 0

Views: 557

Answers (1)

varman
varman

Reputation: 8894

You cannot use Or for both fields, you need to use In. Eg query.addCriteria(Criteria.where("status").in(<YOUR_ARRAY>))

Upvotes: 2

Related Questions