当模式中有一个字母时,mongodb RegEx返回所有记录

时间:2015-01-06 09:30:12

标签: regex mongodb

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

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

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

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

这将返回名称

中任何位置包含“汉字”的所有记录

但是当我使用

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

它会返回所有记录,无论它是否包含“汉”

我的要求是我只需要在任何位置存在“汉”的记录

英语字符也是如此。

2 个答案:

答案 0 :(得分:5)

要检查名称中是否出现某个字符序列 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标记已删除,因为您不需要它。

答案 1 :(得分:1)

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

* 

表示0或更多匹配,因此它是可选的。

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