Estoy codificando la consulta mongodb en Java
criteria.andOperator(Criteria.where("id").is(id), Criteria.where("name").is(name), Criteria.where("age").is(age), Criteria.where("address").is(address), Criteria.where("phonemun").is(phonenum));Estoy codificando la consulta como arriba.
criteria.andOperator(Criteria.where("id").is(id), Criteria.where("name").is(name)); if(age != null){ criteria.andOperator(Criteria.where("age").is(age)); } if(address != null){ criteria.andOperator(Criteria.where("address").is(address)); } if(phoneNum != null){ criteria.andOperator(Criteria.where("phonenum").is(phoneNum)); }Este es el único método que se me ocurre, pero cuantas más condiciones, más complicado se vuelve el código. ¿Hay una mejor manera?
Puedes probar esto:
Map<String, Object> params = new HashMap<>(); params.put("id", id); params.put("name", name); params.put("age", value); // value is Integer or null // ...similarly for phoneNum, address, etc Collection<Criteria> criterias = new ArrayList<>(); params.forEach((k, v) -> { if (v != null) { criterias.add(Criteria.where(k).is(v)); } }); Criteria criteria = new Criteria().andOperator(criterias);Si tuviera un método como addCriteria (Criteria crit, String fieldName, Object val)
if (val != null) { criteria.andOperator(Criteria.where(fieldName).is(val)); }entonces podrías poner la lógica en este método
addCriteria (criteria, "Age", age); addCriteria (criteria, "Name", name);