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