Spring Data Mongo中的MongoDB自定义查询

时间:2017-09-14 07:29:25

标签: spring-data-mongodb

有人可以帮我创建一个查询(Mongo),使用Mongodb类型的新函数(示例):

@Override
public Long maxCodigoSecuencia() {
final Query query = new Query().limit(1).with(new Sort(Sort.Direction.DESC, "codigo_secuencia"));
Oportunidad oportunidad = mongoTemplate.findOne(query, Oportunidad.class);
return oportunidad.getCodidoSecuencia();

}

实体(MongoDB的):

Opportunity
  String commercial (id)
  String statu  ( enum)
  String product  ( id)

Dto过滤器:

dtoFilter
  List<String> commercial (id of comercial)
  List<String> statu ( enum of status)
  List<String> product ( id of product)

我从前面得到一个带有商业ID列表的dtoFilter,一个带有枚举状态的字符串列表和一个带有产品ID的字符串列表。我寻找所有的机会&#34;与列表(AND)

重合

有人可以帮我解决搜索问题。

谢谢

1 个答案:

答案 0 :(得分:0)

每个文档都可以$or条件。

这样的东西
@Override
public List<Oportunidad> getOportunidads(DtoFilter dtoFilter) {
    List<String> commercial = dtoFilter.getCommercial();
    List<String> statu = dtoFilter.getStatu();
    List<String> product = dtoFilter.getProduct();
    List<Criteria> andCriteria = new ArrayList<>();
    for(int i=0; i < commercial.size(); i++) {
        andCriteria.add(Criteria.where("commercial").is(commercial.get(i)).and("statu").is(statu.get(i)).and("product").is(product.get(i)));
    }
    Criteria orCriteria = new Criteria().orOperator(andCriteria.toArray(new Criteria[andCriteria.size()]));
    return mongoTemplate.find(new Query().addCriteria(orCriteria), Oportunidad.class);
}