代码之家  ›  专栏  ›  技术社区  ›  Shubham A.

检查多个字段是否包含字符串

  •  1
  • Shubham A.  · 技术社区  · 5 年前

    我正在使用MongoTemplate构造一个查询,该查询搜索字符串(与 LIKE %abc% 在SQL中)跨越多个字段。所以,我有一个物体像:

    {
      "location": "Pacific",
      "status": "Closed",
      "badge": "220394"
    }
    

    我试过的 :

    现在,我写了一个查询如下:

    Criteria freeTextCriteria = Criteria.where("badge").regex(".*" + freeText + ".*", "i");
    dynamicQuery.addCriteria(freeTextCriteria);
    

    只有当我通过时才会返回到对象上方 freeText 作为 2039 但当我通过时不返回任何结果 自由文本 作为 220394 (全值)。为什么会这样?

    另外,我需要对多个字段进行此查询。所以, 2039年 应该匹配 location 或者 status 或者 badge . 当我运行以下查询时:

    Criteria freeTextCriteria = 
        Criteria.where("location").regex(".*" + freeText + ".*", "i")
            .orOperator(Criteria.where("badge").regex(".*" + freeText + ".*", "i"));
    dynamicQuery.addCriteria(freeTextCriteria);
    

    上面没有返回任何结果,即使部分文本。我该怎么解决?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Naveen Negi    5 年前
    Criteria freeTextCriteria = new Criteria();
    freeTextCriteria.orOperator(Criteria.where("location").regex(".*"+ freeText +".*"), Criteria.where("badge").regex(".*"+ freeText +".*"));
    Query dynamicQuery = new Query(freeTextCriteria);
    mongoTemplate.find(dynamicQuery, <Yourclass>.class, "collectionName");
    

    这会奏效的。