所以,案例很简单。我希望在一个字段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 })
这种分类适用于名称和 some-company-id
。因此,它也将查找 SOME-COMPANY-ID
和 SoMe-CoMpAnY-iD
,这可能会导致不必要的冲突,并且由于所有情况都匹配,对于 companyId
的任何支持索引都没有帮助。
我的问题是:如何有效地搜索只有一个字符串字段不区分大小写?
可能的答案可以是类似于正则表达式搜索:
db.users.find({ companyId: 'some-company-id', name: /^John$/i })
...但很遗憾,任何索引都无法支持该搜索。