Mongodb中的部分字符串匹配

时间:2015-10-01 23:04:08

标签: regex mongodb

假设我有一堆像这样的mongodb记录,它们都是字符串:

{myRecord:'foobarbazfoobaz'}
{myRecord:'bazbarfoobarbaz'}
{myRecord:'foobarfoofoobaz'}
{myRecord:'bazbarbazbazbar'}

我需要能够以两种方式进行部分字符串匹配:

1)我希望匹配foobar'所以它返回:

'foobarbazfoobaz'
'foobarfoofoobaz'

请注意,' foobar'是一个部分字符串,它与字符串开头的任何记录相匹配。如果' foobar'并不重要。稍后在字符串中出现。只要“foobar”的前六个字符就可以了。与记录的前六个字符匹配,我希望得到它。

2)我需要能够匹配' baz %%% baz'所以它返回:

bazbarbazbazbar

这里' baz %%% baz'匹配任何记录的前三个字符,忽略接下来的三个字符,然后匹配最后三个字符。同样,如果此模式稍后出现在字符串中并不重要,我只是感兴趣,如果我可以从字符串的开头匹配它。

我认为有一些mongo正则表达式可以做到这一点(希望如此),但在正则表达式方面我很糟糕。任何帮助将不胜感激。

这适用于用户在时间轴上搜索事件序列的Web应用程序,他们总是必须从头开始搜索,但如果他们愿意,可以在搜索中留下空白。

2 个答案:

答案 0 :(得分:0)

你可以试试$ regex operator

  

1)我想匹配' foobar'

db.collection.find({" myRecord" {" $正则表达式":" ^ foobar的*"}})

  

我需要能够匹配' baz %%% baz'

db.collection.find({" myRecord" {" $正则表达式":" ^巴兹{3}巴兹"}})

希望它会有所帮助

答案 1 :(得分:0)

坚持下去 - 刚刚找到了处理第二种情况的方法,结果出乎意料地直截了当:     { “myRecord”:{ “$正则表达式”: “^巴兹{3} .baz”}} 我可能应该花些时间学习如何使用正则表达式!

相关问题