不区分大小写排序与Morphia (Java)



我有一个Java项目和MongoDB数据库。我使用Morphia来查询数据。我需要根据一个字段来订购这些数据,该字段可能以小写字母或大写字母开头(甚至数字或符号,但这里不相关)。我的问题是,Morphia似乎是根据它们的ASCII/Unicode值来排序的,所以我首先得到所有的小写行,然后得到所有的大写行。有没有办法告诉Morphia在排序过程中忽略大小写?

目前为止我的(简化)代码:

Query<MyObject> query = store.query(MyObject.class);
query = query.field("myfield").equal("some value");
query.order("myfield");
query.asList();

参考MongoDB中不区分大小写的排序,我们可以用{locale: "en"}设置排序。乍一看,这有点违反直觉。为什么设置区域设置可以使查询忽略大小写?

那么让我们检查一下排序的文档,大小写敏感性实际上是由caseLevel决定的。

可选的。确定在强度级别1或2时是否包含大小写比较的标志。

如果为false,则不包括级别1或级别2的大小写比较。默认为false。

默认值为false,因此排序将通过设置区域设置来忽略大小写。


在Morphia中,我们可以通过FindOptions设置排序规则,如下所示。

Query<MyObject> query = store.query(MyObject.class);
query = query.field("myfield").equal("some value");
query.order("myfield");
FindOptions options = new FindOptions();
options.collation(Collation.builder().locale("en").build());
query.asList(options);

最新更新