Java - MongoDB不区分大小写,不检查完全匹配

时间:2015-06-06 11:19:31

标签: java regex mongodb

我尝试使用不区分大小写的查询,但通过这样做,可以通过输入部分用户名来查找用户。即" f"中的用户名类型并且有一个用户名为" foo"它会返回foo的文件。

我用它来检查不区分大小写的匹配

private DBObject getQuery(String where, String whereValue)
{
    return new BasicDBObject(where, Pattern.compile(whereValue, Pattern.CASE_INSENSITIVE));
}

如何查看完全匹配但忽略大小写?

3 个答案:

答案 0 :(得分:1)

这真的是关于你正在使用的正则表达式模式。对于字符串中的“foo”和 only “foo”,请使用:

/\bfoo\b/i

或者特别是在字符串的“开头”:

/^foo\b/i

如果没有具体细节,您将无法获得“特定”匹配。

MongoDB使用 pcre 库(或至少兼容),因此请使用与该约束匹配的表达式。

当然,这确实包括不区分大小写的“i”选项。因此,这将匹配“foo”和“FOO”的“单词”以及其他可能的案例变体。

另请注意,在使用基于MongoDB正则表达式的查询时,除非字符串使用插入符“^”“锚定”到字符串的开头,否则搜索将在集合中的所有文档上完成,而不仅仅是在某个地方以某种形式包含“foo”的那些。

只有插入符号“^”可以使用索引,但是再次使用“不区分大小写”选项也会将其吹掉。

为了进行有效的搜索,请在文档中包含一个带有“规范化”大小写的字符串,并希望仅从字符串的开头查看。

答案 1 :(得分:0)

使用^字符开始正则表达式并以$字符结束,它将正常工作。

private DBObject getQuery(String where, String whereValue)
{
    return new BasicDBObject("^" + where + "$", Pattern.compile(whereValue, Pattern.CASE_INSENSITIVE));
}

答案 2 :(得分:0)

在上面给出的答案中,有一件事是错误的。 正则表达式应用于键而不是值。为了纠正它,我们应该使用正则表达式而不是像下面给出的代码那样的正则表达式。

private DBObject getQuery(String where, String whereValue)
{
return new BasicDBObject(where, Pattern.compile("^" + whereValue + "$", Pattern.CASE_INSENSITIVE));
}

现在它将正确地进行不区分大小写的搜索。亲爱的:)