因此,情况很简单。我想在字段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 })
该排序规则适用于名称AND some-company-id
。因此,对于SOME-COMPANY-ID
和SoMe-CoMpAnY-iD
来说也是如此,这可能会导致意外的冲突,并且由于所有情况都匹配,因此companyId
上的任何支持索引都无济于事。
我的问题是:如何仅用1个不区分大小写的字符串字段有效地搜索?
可能的答案可能类似于regex-search:
db.users.find({ companyId: 'some-company-id', name: /^John$/i })
...但是很遗憾,任何索引都无法支持此搜索。
答案 0 :(得分:0)
到目前为止,经过长时间的讨论,谷歌搜索,尝试与mongoDB团队联系,我们认为没有比这更可靠和透明的了,而是支持像name_lowercase
这样的单独字段进行索引搜索。
但是,如果您确实需要针对一种特定情况执行此操作,请按照这种方式执行。