【问题标题】:MongoDB can't find by national regex or queryMongoDB 无法通过国家正则表达式或查询找到
【发布时间】:2023-03-18 18:06:02
【问题描述】:

看来我错过了一些重要的事情。 我有一些记录插入到 mongoDB 中,其中包含带有国家字符的字段。将其插入数据库或找到它们没有问题,所有值看起来都不错。 但是,如果我尝试使用“find()”或“regex()”找到特定的,它们什么也不会返回。例如:

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") 返回真。 如果我将模式替换为仅包含 ASCII 字符的模式(例如“.abc.”),所有方法都会按预期工作。 Collection.findAll() 返回所有保存的具有可读和正确值的实例。

版本:MongoDB 2.0.6 64 位、mongo-java-driver 2.8.0、Java 7。我尝试了同样的 spring-data-mongodb 1.0.2.RELEASE 但删除了它。

【问题讨论】:

    标签: java mongodb search


    【解决方案1】:

    看起来我遇到了一个与 maven + testng 相关的奇怪错误。从 .war 和 testsuit 执行的相同代码在数据库中提供完全不同的结果。

    浏览器指向

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

    并查看每次执行后的值。

    【讨论】:

    • 保存的结果是否以任何可解释的方式有所不同......例如 UTF8 编码与不编码?也许测试套件与部署的 .war 文件中存在不同的环境设置。
    • 嗯,事实证明,从 'mvn test' 和 'mvn jetty:run' 发出的调用是有区别的。我猜肯定插件会忽略 utf-8 设置。
    猜你喜欢
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    相关资源
    最近更新 更多