我有一个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);
程序仅返回具有pecified参数名称的用户。 如果我将名称设置为Alex,那么我将不会获得名为alex,ALEX等的用户 有什么额外的东西,我必须与吗啡,以使整理工作?
答案 0 :(得分:0)
我有替代方法来解决您的问题。 在查询中使用正则表达式。
db.users.find({"名称" {$正则表达式:/ ^亚历$ / I}})
在java代码中执行此操作。写一个java函数,它将构造如上所述的字符串,例如
{"名称" {$正则表达式:/ ^亚历$ / 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