看起来像我想念重要的事情。 我有一些记录插入到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