MongoDB仅区分单个字段怎么做?

时间:2019-05-08 09:17:46

标签: mongodb

因此,情况很简单。我想在字段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-IDSoMe-CoMpAnY-iD来说也是如此,这可能会导致意外的冲突,并且由于所有情况都匹配,因此companyId上的任何支持索引都无济于事。

我的问题是:如何仅用1个不区分大小写的字符串字段有效地搜索

可能的答案可能类似于regex-search:

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

...但是很遗憾,任何索引都无法支持此搜索。

1 个答案:

答案 0 :(得分:0)

到目前为止,经过长时间的讨论,谷歌搜索,尝试与mongoDB团队联系,我们认为没有比这更可靠和透明的了,而是支持像name_lowercase这样的单独字段进行索引搜索。

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

但是,如果您确实需要针对一种特定情况执行此操作,请按照这种方式执行。