2012-07-21 49 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