我在mongodb中有一个集合(RDBMS中的表),其中包含邮件接收者的名称。
名称可能包含普通英文字符或日文字符或两者的组合。
我使用RegExp
查找与我传递的模式匹配的名称,下面是代码
db.user_logs.find({ "recipientName": new RegExp(".*漢字*", "i") })
这将返回名称
中任何位置包含“汉字”的所有记录但是当我使用
时 db.user_logs.find({ "recipientName": new RegExp(".*漢*", "i") })
它会返回所有记录,无论它是否包含“汉”。
我的要求是我只需要在任何位置存在“汉”的记录
英语字符也是如此。
答案 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") })