2014-01-20 4 views
0

사용자가 키워드 또는 구를 통해 쿼리 할 수있는 MondoDB에 저장된 많은 텍스트 데이터를 가지고 있으며 일부 데이터에 유니 코드 문자 U + 00A0 (중단없는 공간)이있는 문제가 있습니다. 정규 공간의MongoDB가 공백을 정규식으로 쿼리합니다.

옵션이 아닌 데이터를 수정하면 (해당 nbsp이 의도적으로 존재 함) 사용자가 해당 데이터를 검색하고 찾을 수 있기를 바랍니다.

{ "tt" : { "$elemMatch" : { "x" : { "$regex" : "high[\s]performance" , "$options" : "i"} }}} 

(쿼리에 더 많은, 그건 그냥 거기 있어요 : 사용자가과 같이 쿼리의 결과로 공간을 입력 어디 그래서 나는 장소에서 [의 \] 공백을 검색하기 위해 몽고 쿼리 건물 코드를 업데이트 관련 비트).

아쉽게도 예상 결과가 반환되지 않습니다. 그래서 나는 그래서,이 작업을 수행 할 수있는 다른 방법의 무리와 함께 놀러, 결국 [^ \ S] 내가 "하지 않은 공백"을 검색 할 때 올바른 결과를 얻을 것을 발견 :

{ "tt" : { "$elemMatch" : { "x" : { "$regex" : "high[^\S]performance" , "$options" : "i"} }}} 

어떤 내 질문에 - "공백이 아닌"("^ \ S") 성공적으로 그것을 발견하는 동안 왜 "모든 공백"("\ s")이 텍스트를 찾는 실패합니까? Mongo는 공백과 공백이 아닌 것에 대해 다른 규칙을 가지고 있습니까?

데이터 전반에 걸쳐 UTF-8로 전부입니다, MongoDB의 버전은 2.2.2

답변

1

내가 여기에 문제가없는 공백, \ 함께 있다고 가정합니다. 제 추측을 증명하기 위해 \\을 부탁 드릴 수 있습니까?

+0

그래, 내 업스트림 코드에 이미 \\가 있지만 \\ 쿼리 만 생성 했으므로 "\\\\ s"를 사용하여 쿼리를 작성해야했습니다. D – devin

+0

@devin : 완전한! :) –

관련 문제