【问题标题】:MongoDB Case Insensitive Index Not WorkingMongoDB 不区分大小写的索引不起作用
【发布时间】:2020-06-11 01:41:15
【问题描述】:

我有一组用户,其中一个文档字段名为 leaderboard_name。这是一个文本字段,我希望能够以不区分大小写的方式查询它。

所以我在Mongo docs 之后使用自定义排序规则创建了一个新索引。我使用指南针 GUI 创建了它,并设置 locale = en,strength = 1 并将其他所有内容保留为默认值:

我有以下文件要查询:

{
  leaderboard_name: "johndoe"
}

我希望通过这个索引,我应该能够查询JOHNDOE 并找到这个文档,但我一直没有得到任何结果。只有当我用匹配的大小写搜索时,我才会得到匹配。

甚至解释计划都说查询中没有使用索引:

这是 MongoDB 4.0.16,我的理解是从 3.4 开始支持不区分大小写的排序规则。我查看了this answer,除了使用 compass 来创建索引而不是 mongo shell 之外,我想我所做的一切都是一样的。

【问题讨论】:

  • 您必须在查询中指定排序规则选项
  • 请不要粘贴图片。使用格式化文本代替代码。
  • @prasad_ 谢谢!我假设只查询leaderboard_name 字段,它会自动选择我创建的索引。

标签: mongodb mongodb-query


【解决方案1】:

如果其他人偶然发现此问题,解决方案是确保查询包含排序规则详细信息。就我而言,这意味着将我的 Java 查询更改为:

private final static Collation IGNORE_CASE =
        Collation.builder()
                .locale("en")
                .collationStrength(CollationStrength.PRIMARY)
                .build();

Document user =
        userCollection
                .find(new Document("leaderboard_name", "johndoe"))
                .collation(IGNORE_CASE)
                .first();

【讨论】:

    猜你喜欢
    • 2012-08-17
    • 1970-01-01
    • 2013-06-20
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多