2013-04-16 2 views
1

전화 번호를 검색하려면 Mongo에 대한 쿼리를 작성했습니다. gotcha 전화 번호는 이 아니라 String입니다. 처음에는 쿼리가 올바르게 형식이 지정되지 않으면 일치하지 않는다는 것을 알았지 만 이제는 제대로 작동한다고 생각했습니다.서식에 관계없이 전화 번호 일치

그래서 내 질문에 형식에 관계없이 전화 번호를 일치시키는 가장 쉬운 방법은 무엇입니까?

최악의 시나리오 나는 $ where 문을 사용하고 두 값에서 숫자를 제거하고 그에 대한 정규식 일치를 수행하여 평등을 확인합니다. 이 작업을 수행하는 가장 최적의 방법이 있는지 궁금합니다.

+2

'/.+/'는 모든 전화 번호와 일치합니다. – Shmiddty

+0

빈 전화 번호를 제외하고 – copy

+0

전화 번호가 비어 있다면 정말 전화 번호입니까? 당신의 영혼이 비어 있다면, 당신은 정말로 사람입니까? – Shmiddty

답변

2

DB가 처음에는 정규화되지 않았기 때문에 정규화 된 전화 번호를 저장합니다 (예 : 숫자가 아닌 문자는 제거되거나 표준 형식으로 포맷 됨). 각 검색에 대해 즉시 수행 요청이 너무 비싸므로 이미 너무 많은 항목이없는 경우 (예 : 아직 개발중인 경우), 한 번에 모든 항목을 표준화하는 스크립트 (또는 생산 시스템)이 가능합니다.

그러면 where 절이 입력을 표준화하면 검색이 훨씬 쉬워집니다.

같은 방식으로 주소를 찾으려면 좋은 검색을 수행하기 위해 데이터를 정규화해야합니다. 그렇지 않으면 퍼지 매칭 알고리즘을 개발해야하는데, 이는 단순히 느려질 것입니다. (그리고 생각보다 많은 시간이 걸릴 수도 있습니다)

+1

정규화 된 숫자로 저장해야한다는 점에 분명히 동의합니다. 숫자가 아닌 모든 것을 저장할 때 항목에서 제거되도록 스키마에 일부 설정자를 작성해야합니다. 그래서 유일한 수행 방법은 그것을 '숫자'로 변환하는 것이라고 가정합니다. –

+0

숫자 또는 정규화 된 문자열 (예 : 국제 전화 번호 형식을 찾아 번호를 저장할 때나 검색 할 때 입력 할 때 적용) –

+0

감사합니다. 나는 다른 코멘트에 이것을 언급했다, 우리는 현재 특정 형식으로 모든 항목을 저장하고있다. 이전에는 기능이 입력 된 방식대로 전화 번호를 저장했다. –