Reputation: 25
I make a filter with 2 input.
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
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