2014-01-20 85 views
0

我有一個存儲在MondoDB中的文本數據的大量集合,用戶可以通過關鍵字或短語查詢,並且有一些問題,其中一些數據具有unicode字符U + 00A0(無中斷空間)一個固定的空間。MongoDB用正則表達式查詢空格

修復數據不是一個選項(那些nbsps是有意的),我仍然希望用戶能夠搜索並找到該數據。所以,我更新了蒙戈查詢生成代碼,以搜索任何空白[\ S]在地方,用戶輸入一個空格,導致查詢像這樣:

{ "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:完善! :) –