我已經爲Mongo寫了一個查詢來搜索電話號碼。該陷阱是電話條目是String
而不是Number
。起初我認爲它工作正常,但是現在我意識到如果查詢格式不正確,它將不匹配。匹配電話號碼無論格式
所以我想我的問題是什麼是匹配電話號碼最簡單的方式,無論格式?
最糟糕的情況我使用$ where語句,並通過從兩個值中刪除數字並對其進行正則表達式匹配來檢查相等性。只是想知道是否有更好的方法來做到這一點?
我已經爲Mongo寫了一個查詢來搜索電話號碼。該陷阱是電話條目是String
而不是Number
。起初我認爲它工作正常,但是現在我意識到如果查詢格式不正確,它將不匹配。匹配電話號碼無論格式
所以我想我的問題是什麼是匹配電話號碼最簡單的方式,無論格式?
最糟糕的情況我使用$ where語句,並通過從兩個值中刪除數字並對其進行正則表達式匹配來檢查相等性。只是想知道是否有更好的方法來做到這一點?
我會首先在數據庫中存儲標準化的電話號碼(例如,剝離非數字字符或格式化爲標準格式),因爲它們還沒有標準化,因此可以在每次搜索時對其進行實時處理請求將是昂貴的,所以如果你沒有太多的條目(例如,如果這仍然是在開發中),一個腳本將規範化所有條目在一個鏡頭(或在幾個小時內,如果你有一個鏡頭生產系統)將成爲可能。
然後你的where子句將只是標準化輸入,然後搜索會容易得多。
同樣,地址的方式,你必須規範化的數據執行良好的搜索,或者你將不得不開發一些模糊匹配算法,這隻會變慢。 (可能會比你想象的花更多的時間)
我絕對同意你應該將它們存儲爲規範化的數字。我需要在架構中編寫一些setter以確保在保存非數字的所有內容時從條目中刪除。所以我假設唯一的高性能方法是將其轉換爲'Number'? –
既可以是數字也可以是規範化的字符串(例如,找到一個好的國際電話號碼格式,並且在保存號碼和搜索時在您的輸入上強制執行) –
好的,謝謝。我在另一條評論中提到了這一點,我們目前正在以特定格式存儲我們的所有條目,之前的功能是按照輸入的方式存儲電話號碼。 –
'/.+/'將匹配所有電話號碼。 – Shmiddty
除了空電話號碼 – copy
啊,但如果電話號碼是空的,它真的是一個電話號碼?如果你的靈魂是空的,你真的是一個人嗎? – Shmiddty