我有一台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/