对mongodb不区分大小写的查询

w43*_*43L 17 mongodb

有没有办法在不使用map/reduce的情况下在mongo上查询不区分大小写的值?

And*_*ich 25

假设您有包含tag字段的文档,并且您希望在其上进行搜索

Tags
{
  tag,
  ...
 }
Run Code Online (Sandbox Code Playgroud)

第一个选项是使用正则表达式(但它运行缓慢,如@RestRisiko所说):

db.tags.find( { "tag" : { "$regex" : "C#", "$options" : "-i" } })
Run Code Online (Sandbox Code Playgroud)

第二个选项是创建另一个小写字段(在mongodb中最好的方式):

Tags
{
  tag,
  tagLower,
  ..
}
Run Code Online (Sandbox Code Playgroud)

find像往常一样使用:

db.tags.find( { "tagLower" : "c#"})
Run Code Online (Sandbox Code Playgroud)

它会更快,因为上面的代码可以使用索引进行搜索.


小智 8

您必须规范化要查询的数据.使用正则表达式进行不区分大小写的搜索可能也有效,因此不会使用索引.所以你唯一的选择是规范化.如果需要保留原始状态,则需要对数据进行非规范化并将规范化值存储在文档的专用列中.