【问题标题】:How to do MongoDB case-insensitive search for single field only?如何仅对单个字段进行 MongoDB 不区分大小写的搜索?
【发布时间】:2019-05-08 09:17:46
【问题描述】:

所以,情况很简单。我想对字段name 进行不区分大小写的搜索。幸运的是,最新的 Mongo 为我们带来了排序规则和排序索引的概念。

这将很容易与以下内容一起使用:

db.users.find({ name: 'John' }).collation({ locale: 'en', strength: 2 })

而且我有给定排序强度的字段的支持索引 - 非常有效。

但是,如果我想将搜索限制在更严格的范围内,例如有一些companyId 常量,事情变得有点混乱:

db.users.find({ companyId: 'some-company-id', name: 'John' }).collation({ locale: 'en', strength: 2 })

该排序规则同时适用于 name 和 some-company-id。因此,SOME-COMPANY-IDSoMe-CoMpAnY-iD 也同样适用,这可能会导致意外的冲突,并且由于所有情况都匹配,companyId 上的任何支持索引都无济于事。

我的问题是:我怎样才能有效地搜索只有 1 个不区分大小写的字符串字段

可能的答案可能类似于正则表达式搜索:

db.users.find({ companyId: 'some-company-id', name: /^John$/i })

...但不幸的是,任何索引都不支持此搜索。

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    到目前为止,经过长时间的讨论、谷歌搜索、尝试联系 mongoDB 团队,我们认为没有什么比支持单独的索引搜索字段更可靠和透明的了,比如name_lowercase

    1. 它非常透明。
    2. 您可以按照自己的方式管理不变量。
    3. 但你必须在你的代码库中支持它。
    4. 数据和索引翻倍需要更多磁盘空间和网络带宽。

    但如果您确实需要针对某个特定情况执行此操作,请按此方式执行。

    【讨论】:

      猜你喜欢
      • 2013-02-24
      • 1970-01-01
      • 2021-12-31
      • 2010-10-28
      • 2015-10-23
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多