2012-07-21 89 views
0

看起來像我想念重要的事情。 我有一些記錄插入到mongoDB中,其中包含具有國家字符的字段。將它插入數據庫或找到它們並沒有問題,並且所有值看起來都不錯。 但是,如果我試圖找到特定的「find()」或「regex()」,它們什麼都不會返回。例如:MongoDB無法通過國家的正則表達式或查詢

DBObject query = new BasicDBObject(); 
query.put("position", Pattern.compile(".*forsøg.*")); 
--or-- 
query.put("position","forsøg"); 
System.out.println(collection.find(query).count()); // prints 0 

在日誌

query={ "position" : { "$regex" : ".*������.*"}} 
--or--- 
query={ "position" : "������"} 

字段值用於 「位置」 等於 「forsøg」 OFC。 Pattern.matches(「。*forsøg。*」,「forsøg」)返回true。 如果我將模式替換爲僅包含ASCII字符的模式(例如,「abc。」),則所有方法均按預期工作。 Collection.findAll()以可讀和正確的值返回所有已保存的實例。

版本:MongoDB 2.0.6 64位,mongo-java-driver 2.8.0,Java 7.我試着用spring-data-mongodb 1.0.2.RELEASE,但刪除它。

回答

0

看起來我遇到了一個與maven + testng相關的奇怪的bug。從.war和testsuit執行的相同代碼在數據庫中提供完全不同的結果。

的差異可能,如果你的瀏覽器指向

http://127.0.0.1:28017/baseName/collectionName/ 

,並期待在每次執行後的值很容易被發現。

+0

保存的結果是否以任何可解釋的方式不同?例如UTF8編碼與不是?也許環境設置在測試套件與部署的.war文件中有所不同。 – Stennie 2012-07-23 01:37:45

+0

那麼,事實證明,從'mvn test'和'mvn jetty:run'進行的呼叫之間是有區別的。我想那個surefire插件忽略utf-8設置。 – Observer 2012-07-23 06:48:56