如何在Ruby on Rails环境中使用Mongoid进行通配符搜索?

时间:2012-03-30 04:25:54

标签: ruby-on-rails regex mongodb mongoid

Mongoid文档仅提供了一个进行通配符搜索的示例:

Person.where(first_name: /^d/i)

这会找到名字以“d”开头的所有人。

/^/i代表什么?

如何在字符串中间找到名字中包含“na”的所有人?例如,这个查询会找到“jonathan”,因为“na”是整个字符串的子字符串。

是否有关于此信息的网站或指南?

2 个答案:

答案 0 :(得分:37)

您需要这样才能找到名字中包含“na”的人。

Person.where(first_name: /na/i)

至于你的例子:

Person.where(first_name: /^d/i)

^表示“行首”。此正则表达式将匹配第一个字母为“d”的所有字符串。 /i表示“执行不区分大小写的匹配”。所以它会匹配“d”和“D”。

注意:只有前缀regexes(前面有^)才能使用索引。

  

是否有关于此信息的网站或指南?

这是my favourite

答案 1 :(得分:4)

这不是“通配符”搜索,这称为正则表达式。

/^d/i
  • 这两个斜杠只是正则表达式分隔符,您可以搜索这两个斜杠之间的内容。
  • 以下i是修饰符或选项。它会更改正则表达式的匹配行为,i代表不区分大小写,表示它匹配“d”和“D”。
  • 第一个字符^是一个锚,它将搜索模式锚定到字符串的开头,意味着仅在字符串的开头匹配“d”

关于正则表达式的一个很好的教程是tutorial on regular-expressions.info

如果要在字符串中的任何位置搜索字符串,只需删除将模式绑定到开头的锚点,/na/将在字符串中的任何位置找到“na”。