Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Morphia忽略排序规则_Java_Mongodb_Collation_Morphia - Fatal编程技术网

Java Morphia忽略排序规则

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

我有一台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 = 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和排序规则,您可以像以前一样使用正则表达式,但您也有索引。很抱歉响应太晚。无法通过在必填字段上添加文本索引来完成?可以,但文本索引有其他限制,而且速度较慢