在$中使用Mongo $或查询并使用Java MongoOperations

时间:2017-09-14 09:54:11

标签: java regex mongodb mongodb-query spring-data-mongodb

我正在尝试使用regex子句查找处于活动状态的记录。

我需要通过字符串查找记录,该字符串存在于用户的全名 OR 电子邮件地址的任何位置。

我尝试了以下mongo查询,它按预期完美运行:

  db.getCollection('users').find({ $and : 
    [
     {"status" : "active"}, 
      { $or : 
        [ 
            {"fullName": /.*ri.*/}, 
            {"email": /.*ri.*/} 
        ] 
      }
    ] 
  } )

在这里,我正在搜索处于活动状态的用户,其电子邮件或全名包含字符" ri"

我尝试在Java中转换相同的内容如下:

 String regexSearch = ".*" + clauseForAutoSearch + ".*";
 Query findQuery = new Query();
 findQuery.addCriteria(
        Criteria.where("fullName").regex(regexSearch, "i")
        .orOperator(Criteria.where("email").regex(regexSearch, "i")).and("status")
        .is(UserStatusEnum.ACTIVE.getStatus())); // "active" string

  // "i" stands for case insensitivity. $options in mongo

  for (User user : mongoOperations.find(findQuery, User.class)) {
    userList.add(user);
  }

大部分时间都会产生 NULL ,它只会给出实际结果几次。

有人可以告诉我哪里出错吗?

编辑:这里" clauseForAutoSearch"只不过是我需要在现有记录的全名/电子邮件中找到的字符串变量。

e.g。有一个名为汤姆克鲁斯的记录。 所以,即使我进入" rui"或"是"它应该显示记录,因为字符串出现在记录的全名/电子邮件中

0 个答案:

没有答案