我有一台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函数,该函数将像上面那样构造字符串


  {“名称”:{$ 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/

10-12 02:40