请参阅以下代码:
{$or: [
{titleLong: { $regex: regExp } },
{catalog: { $regex: regExp } },
{catalogNbr: { $regex: regExp } }
]}
我正在尝试查找其字段与某个正则表达式匹配的文档。例如,有这个文件。
{course: {titleLong: "Introduction to analysis of algorithms"},
{catalog: "cs3333"},
{catalogNbr: "3333"}}
当用户键入“intro algo”或“3333”或“cs3333”时,应返回该文档。我尝试了/(intro|algo)/gi
,但它不起作用,因为它会返回所有包含intro
或algo
的文档。此外,g
选项似乎不起作用。我还发现了以下正则表达式:
(?=.*\bintro\b)(?=.*\balgo\b).+
但是,这只会找到包含与intro
完全相同且错过introduction
的文字的文档。
答案 0 :(得分:2)
删除前瞻断言中存在的单词边界,以便它可以进行部分匹配。
(?=.*intro)(?=.*algo).+
OR
(?=.*intro).*algo.*
并且不要忘记打开不区分大小写的修饰符i
包括与"3333"
或"cs3333"
匹配的模式。
(?=.*intro).*algo.*|^(?:cs)?3333$
答案 1 :(得分:0)
您可以在定义$regex
时使用PCRE。您可以返回以特定单词开头的所有条目,并使用内联选项,如(?i)
(不区分大小写的搜索)。这是一个例子:
{titleLong: { { $regex: '(?i).*\bintro.*' } }
或包含“intro”的字母在字符串中的任何位置:
{titleLong: { { $regex: '(?i).*intro.*' } }