如何查询Mongodb Regex Field?

时间:2013-10-15 17:52:03

标签: ruby regex mongodb mongoid

我想在我的Mongoid文档中创建一个正则表达式字段,这样我就可以有这样的行为:

MagicalDoc.create(myregex: /abc\d+xyz/)

MagicalDoc.where(myregex: 'abc123xyz')

我不确定这是否可能以及它会产生什么样的影响。我怎样才能实现这种功能?

更新:我已从Mongoid supports Regexp fields的文档中了解到,但它没有提供如何查询这些文档的示例。

class MagicalDoc
  include Mongoid::Document

  field :myregex, type: Regexp
end

我也接受纯粹的MongoDB答案。我可以找到一种方法将其转换为Mongoid语法。

更新:感谢SuperAce99帮助您找到此解决方案。将字符串传递给Mongoid where函数,它将创建一个javascript函数:

search_string = 'abc123xyz'
MagicalDoc.where(%Q{ return this.myregex.test("#{search_string}") })

%Q是一种有助于逃避引号的Ruby方法。

1 个答案:

答案 0 :(得分:0)

regexp不是有效的BSON type,因此您必须弄清楚Mongoid如何表示它来设计正确的查询。

使用Regex查询字符串

如果要向MongoDB发送正则表达式并返回文档,MongoDB提供了$regex查询运算符,它允许您返回字符串与正则表达式匹配的文档。

使用String

查询正则表达式

如果要向Mongo发送一个字符串并返回所有具有与提供的字符串匹配的正则表达式的文档,则可能需要$where operator。这允许您对每个文档运行Javascript命令:

db.myCollection.find( { $where: function() { return (this.credits == this.debits) } } )

您可以定义一个函数,当提供的字符串与文档中存储的正则表达式匹配时,该函数返回True。显然,这不能使用索引,因为它必须为集合中的每个文档执行代码。这些查询会很慢。