ruby - 如何查询 Mongoid 正则表达式字段?

标签 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 方法。

最佳答案

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/

相关文章:

Mongodb 异常“点不在 [ -180, 180 ] 区间内

ruby-on-rails - Ruby 中 'self.method_name' 和 'class << self' 的区别

ruby - 存储类别的数据模型(多个父节点)

ruby-on-rails - rails 中的线程会自动打开数据库连接吗?

c# - 正则表达式除某些字符外的任何字符

c++ - mongo-cxx-driver 安装会安装库

从 linux 终端运行的 Ruby 可视化调试器

Javascript 正则表达式匹配由空格分隔但不包含点的字符串

javascript - 修改以下正则表达式以在 URL 末尾包含一个斜杠

mongodb - 如何在 Mongo 中进行 "NOT IN"查询?