【问题标题】:How can i dynamically Create Criteria Mongodb Spring data mongo Template我如何动态创建 Criteria Mongodb Spring 数据 mongo 模板
【发布时间】:2014-08-19 11:36:57
【问题描述】:

我需要动态创建标准,但我遇到了如何动态创建标准的问题。

我需要与此处 Build dynamic queries with Spring Data MongoDB Criteria 完全相同的内容,但在将 Criteria 列表转换为 toArray 时出现错误,因为它一直说 orCriteria 不支持 Criteria[]

这是我目前的努力

这是我的查询结构

{
  "query":{

    "where":[{

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

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

                 "operator":"equal"
              }
            ]
           }
        ]
   }
} 

这是我解析它以创建标准

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

}

我需要将所有带有 in 或 object 的 where 子句作为参数传递给 orOperator 函数

Criteria c = new Criteria().orOperator(Need to pass my where clauses here);

【问题讨论】:

    标签: spring mongodb spring-data-mongodb


    【解决方案1】:

    最好使用 ArrayList of Criteria 来保持$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);
        }
    }
    

    然后从这个orCriteriaList 构建主查询

    mainQuery.addCriteria(new Criteria().orOperator(orCriteriaList.toArray(new Criteria[orCriteriaList.size()])));
    

    【讨论】:

      猜你喜欢
      • 2016-06-30
      • 2014-08-25
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多