【问题标题】:Partial string matching in Mongodb [duplicate]Mongodb中的部分字符串匹配[重复]
【发布时间】:2015-12-30 03:08:37
【问题描述】:

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

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

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

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

'foobarbazfoobaz'
'foobarfoofoobaz'

请注意,这里的 'foobar' 是一个部分字符串,它与字符串开头的任何记录匹配。 'foobar' 后面是否出现在字符串中并不重要。只要'foobar'的前六个字符与记录的前六个字符匹配,我想找回它。

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

bazbarbazbazbar

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

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

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

【问题讨论】:

  • 毫无疑问,我只会被喊倒,但我看不出它是如何重复的 - 但无论如何(明显的)原始版本并没有真正帮助我解决我遇到的特定问题进入。

标签: regex mongodb


【解决方案1】:

你可以试试 $regex 运算符

1) 我想在 'foobar' 上匹配

db.collection.find({"myRecord":{"$regex":"^foobar*"}})

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

db.collection.find({"myRecord":{"$regex":"^baz.{3}baz"}})

希望对你有帮助

【讨论】:

  • 这解决了第一个问题 - 谢谢!
  • 对于第二个问题,几乎可以解决问题,但您知道我如何在“baz”和“bar”之间指定要忽略的一定数量的字符吗?第二个查询,除了选择“bazbarbazbazbar”,还会选择“bazbarbarbarbaz”之类的东西。非常感谢您看这个!
  • 请尝试 db.collection.find({"myRecord":{"$regex":"^baz.{3}baz"}})
【解决方案2】:

等一下 - 刚刚找到了处理第二种情况的方法,结果出乎意料地简单: {"myRecord":{"$regex":"^baz.{3}.baz"}} 我可能应该花一些时间学习如何使用正则表达式!

【讨论】:

  • 它没有返回任何内容,您可以尝试在 } 之后删除 DOT (.)
  • 啊,是的,我现在看到了!谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 2012-06-15
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
相关资源
最近更新 更多