看起來像我想念重要的事情。 我有一些記錄插入到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,但刪除它。
保存的結果是否以任何可解釋的方式不同?例如UTF8編碼與不是?也許環境設置在測試套件與部署的.war文件中有所不同。 – Stennie 2012-07-23 01:37:45
那麼,事實證明,從'mvn test'和'mvn jetty:run'進行的呼叫之間是有區別的。我想那個surefire插件忽略utf-8設置。 – Observer 2012-07-23 06:48:56