java - Morphia 忽略排序规则

标签 java mongodb collation morphia

我有一个 mongo 3.4 服务器,我需要运行不区分大小写的查询。 我已经创建了正确的索引,并且可以通过 mongo 控制台进行不区分大小写的查询。

    db.users.find(  {"name": "alex" }, { "name" : 1 } ).collation( { locale: 'en', strength: 2 } )

返回名称为 Alex、alex、ALEX 等的任何用户

我需要在使用 morphia 1.3.1 的 java 程序中执行相同的操作。

    Collation col = Collation.builder().locale("en").collationStrength(CollationStrength.SECONDARY).build();
    FindOptions fo = new FindOptions().collation(col);
    q.disableValidation().asList(fo);

程序仅返回具有指定参数名称的用户。 如果我将名称设置为 Alex,那么我将不会获得名为 alex、ALEX 等的用户 为了使排序规则正常工作,我必须对吗啡做一些额外的事情吗?

最佳答案

我有替代方法来解决您的问题。 在查询中使用正则表达式。

db.users.find({"name":{$regex:/^alex$/i}})

在 java 代码中执行此操作。编写一个java函数来构造像上面这样的字符串,例如

{"name":{$regex:/^alex$/i}}

并使用下面的代码来获取 DBCursor

public DBCursor find(String jsonString) {
    if(StringUtils.trimToNull(jsonString) != null) {
            DBObject dbObject = (DBObject)JSON.parse(jsonString);
            return collection.find(dbObject);
    }
    return null;
}

然后从 DBCursor 获取 DBObject 列表,并使用 morphia.fromDBObject 函数在所需的类中获取结果。

您可以采用的另一种方法是在必填字段上创建文本索引并使用您想要的任何内容进行搜索。详细信息请参见:https://docs.mongodb.com/manual/reference/operator/query/text/#text-operator-case-sensitivity

关于java - Morphia 忽略排序规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42390097/

相关文章:

Java 和 XML : hack to avoid back-compatibility

java - 如何立即更改 MouseEvent 处理程序中 jLabel 的文本?

java - 当应用程序运行时,使用 Apache Mahout 的 TFIDF 有 "Job failed!"

database - 将现有 Kentico 数据库迁移到 Azure SQL - 排序规则不匹配

mysql 不允许我更改排序规则类型

java - 无法使用 Java ProcessBuilder 启动带有参数的 shell 脚本

linux - 如何使用 CoreOS 的云配置文件启动 Docker 容器?

python - 使用 Python 进行基于时间的数据分析

node.js - 如何将 Express NodeJS 项目部署到 Centos 服务器?

mysql - 如何在 MySQL 中插入西类牙语字符?