【问题标题】:Case insensitive ordering with Morphia (Java)使用 Morphia (Java) 进行不区分大小写的排序
【发布时间】:2021-08-09 08:52:46
【问题描述】:

我有一个 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();

【问题讨论】:

标签: java mongodb morphia


【解决方案1】:

通过引用Case insensitive sorting in MongoDB,我们可以设置与{locale: "en"}的排序规则。乍一看,这有点违反直觉。为什么设置区域设置可以使查询忽略大小写?

那么我们来看看the documentation of collation,区分大小写其实是由caseLevel决定的。

可选。确定是否包括强度级别 1 或 2 的案例比较的标志。
...
如果为 false,则不包括级别 1 或 2 的大小写比较。默认为 false。

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


在 Morphia 中,我们可以设置 CollationFindOptions,如下所示。

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 2018-06-14
    相关资源
    最近更新 更多