我怎样才能动态创建标准Mongodb Spring数据mongo模板

Ram*_*far 0 spring mongodb spring-data-mongodb

我需要动态创建一个标准,但我有问题,我如何动态建立标准.

我需要完全一样,这里建立动态查询与Spring数据MongoDB的标准,但同时,我为我的标准列表转换为指定者作为其一直在说,orCriteria不具备条件的支持[我得到一个错误]

到目前为止,这是我的努力

这是我的查询结构

{
  "query":{

    "where":[{

              "or":[
              {
                 "fieldName":"title","fieldValue":"Demo Event NEW YORK IIII22222",

                 "operator":"equal"
              },
              {
                 "fieldName":"createdBy","fieldValue":"system",

                 "operator":"equal"
              }
            ]
           }
        ]
   }
} 
Run Code Online (Sandbox Code Playgroud)

这是我解析它来创建标准

 if(null != eventSearch.getQuery())
            {

                if(null != eventSearch.getQuery().getWhere() && eventSearch.getQuery().getWhere().size()> 0)
                {

                    for (Where whereClause : eventSearch.getQuery().getWhere()) {

                          if(null != whereClause.getOr() && whereClause.getOr().size() > 0){ 

                              for (Field field: whereClause.getOr()) {

                                  if(field.getOperator().equalsIgnoreCase(QueryOperator.IS))
                                  {
// So i need to append an or Condition to main query for each or object in my query can anyone tell me how can i achieve this?                                        

                     query.addCriteria(Criteria.where(whereClause.getFieldName()).gte(whereClause.getFieldValue()));
                                   }
                              }
                    }
           }

}
Run Code Online (Sandbox Code Playgroud)

我需要传递我的所有where子句in或object toOperator函数作为参数

Criteria c = new Criteria().orOperator(Need to pass my where clauses here);
Run Code Online (Sandbox Code Playgroud)

fai*_*izi 6

最好使用Criteria的ArrayList来保持$or标准如下.

List<Criteria> orCriteriaList = new ArrayList<Criteria>();
for (Field field: whereClause.getOr()) {
    if(field.getOperator().equalsIgnoreCase(QueryOperator.IS)){
        Criteria c1 = Criteria.where(whereClause.getFieldName()).gte(whereClause.getFieldValue());
        orCriteriaList.add(c1);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后从中构建主查询orCriteriaListas

mainQuery.addCriteria(new Criteria().orOperator(orCriteriaList.toArray(new Criteria[orCriteriaList.size()])));
Run Code Online (Sandbox Code Playgroud)