0

我的控制器中有一些代码用作数据库(mongo)中的搜索:

@job_results = Job.where({:merchant_id => admin,:$or => [
                        {:job_number => Regexp.new(/#{key.to_i}/x)},
                        {:type => Regexp.new(/^#{key}/i)},
                        {:status => Regexp.new(/^#{key}/i)}
                    ]})

job_number数据库中存储为整数值,遗憾的是无法更改:

  key :job_number, Integer

当我直接在 mongo 中运行查询时,它返回:

> db.jobs.find( { job_number: 2013058 } )
{ "_id" : ObjectId("519555d789651a5443000346"), "job_number" : 2013058, "type" : "5191027089651a5adb000093", "priority" : "5191027b89651a5d38000001", "start_time" : "08:00", "end_time" : "10:00" }

但是,搜索不会返回任何结果:

MONGODB (0.5ms) DATABASE['jobs'].find({:merchant_id=>"518b762e89651a0389000013", :$or=>[{:job_number=>/2013058/x}, {:type=>/^2013058/i}, {:status=>/^2013058/i}]})

job_results: Array[0]

如果我搜索作业类型(字符串、单词),它可以正常工作。我试图将密钥转换为整数,而 Ruby 并没有抱怨这一点。我也试过了key.to_s.to_i。使用职位编号进行搜索时,如何让职位返回?

4

1 回答 1

0

根据 nyde1319 对我的问题的评论,尝试对整数进行正则表达式是不好的。我最终放弃并将其转换为字符串。这适用于搜索。

我想给 nyde1319 +1 ,但这不是答案 - 只是评论。

回顾 - 不要尝试 Regex.new() 反对 Integer 值。使用字符串。如果您需要对这些值执行数学运算,并且您想使用带有正则表达式的自动完成进行匹配 - 最好将您的字符串转换为整数以进行数学运算 (.to_i)

或者放弃寻找。我无法让它工作。

于 2013-05-30T19:12:35.423 回答