我正在尝试使用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"或"是"它应该显示记录,因为字符串出现在记录的全名/电子邮件中