2014-05-23 47 views
1

我的以下find查询在小写情况下不起作用。如果收集中的值是大写&,我通过的是小写字母不给出结果。Mongo DB - 小写查找

如何覆盖区分大小写的行为?

User.find({ 
     $or: 
     [ 
      { 'basicinformation.firstname': { '$regex': firstname + '.*' } }, 
      { 'basicinformation.lastname': { '$regex': lastname + '.*' } } 
     ] 
    } 
+0

可能重复的[MongoDB:是否有可能使区分大小写的查询?](http://stackoverflow.com/questions/1863399/mongodb-is-it-possible-to-make-a-case-不敏感查询) – WiredPrairie

+0

我看到了这个问题......答案与我的要求不符。 – Anup

+0

事实上,它有好几次重复的答案,并且在MongoDB中使用不区分大小写的搜索是一个性能问题。 '/我'是忽略大小写。 – WiredPrairie

回答

2

添加$options$regex操作:

User.find({ 
    $or: 
    [ 
     { 
      'basicinformation.firstname': { 
       '$regex': firstname + '.*', '$options': 'i' 
      } 
     }, 
     { 
      'basicinformation.lastname': { 
       '$regex': lastname + '.*', '$options': 'i' 
      } 
     } 
    ] 
} 

所以"i"存在使得搜索不区分大小写。请注意,即使您将^正则表达式锚定到字符串的开头,调用不区分大小写的搜索也会强制进行索引扫描。

因为这可能会对您的表现产生很大的影响,所以请考虑其他选项,例如文本搜索索引和查询,或者在附加字段或输入内修改大小写,如果可以避开,则以单个格式存储。

+0

工程很棒..! Thankx ...! – Anup

+0

我还有1个问题....如果用户键入'a'&搜索它.....他应该得到结果的名字从'a' ....开始......但在我当前的查询中,它检查完成名称,如果有'a'则显示全部。 – Anup

+0

@你在正则表达式的开头使用锚定插入符号或'^'字符来匹配字符串的开头。当您发布评论时,我已经通过更多信息对此进行了评论。 –