我的控制器中有一些代码用作数据库中的搜索(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
。在使用工作号码进行搜索时如何让工作返回?
答案 0 :(得分:0)
根据nyde1319对我的问题的评论,尝试正则表达式整数是没有好处的。我终于放弃并将其转换为字符串。这适用于搜索。
我想给nyde1319 +1,但这不是答案 - 只是评论。
回顾 - 不要尝试针对Integer值使用Regex.new()。使用字符串。如果您需要对这些值执行数学运算并且您希望使用自动完成与Regex进行匹配 - 可能最好将您的字符串转换为整数以进行数学运算(.to_i)
或者放弃搜索。我无法使它发挥作用。