所以,案子很简单。我想在字段上进行不区分大小写的搜索name。幸运的是,最新的 Mongo 为我们带来了排序规则和排序索引的概念。
这将很容易与类似的东西一起工作:
db.users.find({ name: 'John' }).collation({ locale: 'en', strength: 2 })
Run Code Online (Sandbox Code Playgroud)
我有给定排序强度的字段的支持索引 - 非常有效。
但是,如果我想将搜索限制在某个更严格的范围内,例如具有一些companyId常量,事情就会变得有点混乱:
db.users.find({ companyId: 'some-company-id', name: 'John' }).collation({ locale: 'en', strength: 2 })
Run Code Online (Sandbox Code Playgroud)
该排序规则适用于 name AND some-company-id。因此,它也会查找SOME-COMPANY-ID和SoMe-CoMpAnY-iD,这可能会导致意外的冲突,并且由于所有情况都匹配,因此任何支持索引都companyId没有帮助。
我的问题是:如何在只有 1 个不区分大小写的字符串字段的情况下有效搜索?
可能的答案可能类似于正则表达式搜索:
db.users.find({ companyId: 'some-company-id', name: /^John$/i })
Run Code Online (Sandbox Code Playgroud)
...但不幸的是任何索引都无法支持此搜索。
到目前为止,经过长时间的讨论、谷歌搜索、试图联系 mongoDB 团队,我们决定没有什么比支持索引搜索的单独字段(例如name_lowercase.
但如果您确实需要针对一种特定情况执行此操作,请按这种方式执行。
| 归档时间: |
|
| 查看次数: |
480 次 |
| 最近记录: |