mongodb RegEx returns 模式中一个字母时的所有记录

mogodb RegEx returns all records when one letter in pattern

我在 mongodb 中有一个包含邮件接收者姓名的集合(RDBMS 中的表)。

名称可以包含普通英文字符或日文字符或两者的组合。

我正在使用 RegExp 查找与我传递的模式匹配的名称,下面是代码

db.user_logs.find({ "recipientName": new RegExp(".*漢字*", "i") })

此returns所有包含“汉字”的所有记录在名称

中的任意位置

但是当我使用

db.user_logs.find({ "recipientName": new RegExp(".*漢*", "i") })

returns全部记录是否包含"汉"

我的要求是只需要那些"汉"在任意位置存在的记录

英文字符也是如此。

我可能是错的,但我认为你应该将最后一个 * 更改为 +

* 

表示0个或多个匹配,所以它是可选的。

db.user_logs.find({ "recipientName": new RegExp(".*漢.*", "i") })
           or
db.user_logs.find({ "recipientName": new RegExp(".*漢+", "i") })

要检查字符1的特定序列是否出现在名称中,正则表达式可以很简单:

db.user_logs.find({ "recipientName": new RegExp("漢字", "i") })
db.user_logs.find({ "recipientName": new RegExp("漢", "i" })

1 如果字符串中包含元字符(在正则表达式中具有特殊含义的字符),则需要对其进行转义。

i 标志对于中文和日文字符是多余的,但我将其保留在那里以防您需要使用拉丁搜索字符串。

如果正则表达式是固定的,也可以选择使用文字正则表达式:

db.user_logs.find({ "recipientName": /漢字/ })
db.user_logs.find({ "recipientName": /漢/ })

i 此处已删除标记,因为您不需要它。