Java Morphia忽略排序规则
我有一台Mongo3.4服务器,需要运行不区分大小写的查询。 我已经创建了适当的索引,可以通过mongo控制台进行不区分大小写的查询Java Morphia忽略排序规则,java,mongodb,collation,morphia,Java,Mongodb,Collation,Morphia,我有一台Mongo3.4服务器,需要运行不区分大小写的查询。 我已经创建了适当的索引,可以通过mongo控制台进行不区分大小写的查询 db.users.find( {"name": "alex" }, { "name" : 1 } ).collation( { locale: 'en', strength: 2 } ) 返回名为Alex、Alex、Alex等的任何用户 我需要在使用morphia 1.3.1的java程序中执行同样的操作 Collation col = Col
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等的用户
我是否需要对morphia做一些额外的工作来进行排序?我有其他方法来解决您的问题。 在查询中使用正则表达式 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函数在所需类中获取结果
另一种方法是在必填字段上创建文本索引,并搜索任何您想要的内容。请参阅此处的详细信息:我有其他方法来解决您的问题。 在查询中使用正则表达式 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函数在所需类中获取结果
另一种方法是在必填字段上创建文本索引,并搜索任何您想要的内容。请参见此处的详细信息:谢谢您的回答,但此解决方案的问题在于它无法使用索引,而且我的收藏有超过一百万的用户。使用Mongo3.4和排序规则,您可以像以前一样使用正则表达式,但您也有索引。很抱歉响应太晚。无法通过在必填字段中添加文本索引来完成?可以,但文本索引有其他限制,而且速度较慢谢谢您的回答,但此解决方案的问题是它无法使用索引,而且我的收藏有超过一百万的用户。使用Mongo3.4和排序规则,您可以像以前一样使用正则表达式,但您也有索引。很抱歉响应太晚。无法通过在必填字段上添加文本索引来完成?可以,但文本索引有其他限制,而且速度较慢