我想在我的 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 方法。
最佳答案
regexp
不是有效的 BSON type ,因此您必须弄清楚 Mongoid 如何表示它才能设计出正确的查询。
使用正则表达式查询字符串
如果要向 MongoDB 发送正则表达式并返回文档,MongoDB 提供了 $regex
查询运算符,它允许您返回字符串与正则表达式匹配的文档。
使用字符串查询正则表达式
如果您想向 Mongo 发送一个字符串并返回所有具有与提供的字符串匹配的正则表达式的文档,您可能需要 $where
operator .这允许您在每个文档上运行 Javascript 命令:
db.myCollection.find( { $where: function() { return (this.credits == this.debits) } } )
您可以定义一个函数,当提供的字符串与存储在文档中的正则表达式匹配时返回 True。显然这不能使用索引,因为它必须为集合中的每个文档执行代码。这些查询会非常慢。
关于ruby - 如何查询 Mongoid 正则表达式字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19387792/