【发布时间】: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-ID 和 SoMe-CoMpAnY-iD 也同样适用,这可能会导致意外的冲突,并且由于所有情况都匹配,companyId 上的任何支持索引都无济于事。
我的问题是:我怎样才能有效地搜索只有 1 个不区分大小写的字符串字段?
可能的答案可能类似于正则表达式搜索:
db.users.find({ companyId: 'some-company-id', name: /^John$/i })
...但不幸的是,任何索引都不支持此搜索。
【问题讨论】:
标签: mongodb