2013-05-22 79 views
0

我在我的控制器一些代碼,用作在數據庫(蒙戈)的搜索:如何在Ruby中使用Regexp.new()來搜索數據庫中的整數值?

@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被存儲爲在DB一個整數值,不幸的是不能改變:

key :job_number, Integer 

當我直接在蒙戈運行查詢,它返回:

> 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

在整數字段中使用regex可能不會像https://jira.mongodb.org/browse/SERVER-1174中所解釋的那樣真正起作用。根據這個問題,在非字符串字段上使用正則表達式「會非常緩慢,並且有點誤導。」 – MervS

+0

merchant_id需要像這樣指定'BSON :: ObjectId.from_string(「518b762e89651a0389000013」)' –

回答

0

根據nyde1319評論我的問題,嘗試使用正則表達式是一個整數是沒有用的。我終於放棄了,並將其轉換爲一個字符串。這適用於搜索。

我想給nyde1319一個+1,但它不是一個答案 - 只是一個評論。

回顧 - 不要試圖針對整數值的Regex.new()。使用字符串。如果您需要針對這些值執行數學運算,並且希望將正則表達式的自動填充用於匹配 - 可能最好將字符串轉換爲數學運算的整數(.to_i)

或放棄搜索。我無法讓它工作。

相關問題