2014-05-23 7 views
1

Mes requêtes find suivantes ne fonctionnent pas en minuscules. Si la valeur dans la collection est & capital que je passe est en minuscules ne donne aucun résultat.Mongo DB - recherche en minuscules

Comment remplacer le comportement sensible à la casse?

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

duplication possible de [MongoDB: est-il possible de faire une requête insensible à la casse?] (Http://stackoverflow.com/questions/1863399/mongodb-is-it-possible-to-make-a-case- insensible-requête) – WiredPrairie

+0

J'ai vu cette question ... la réponse ne correspond pas à mes exigences ..! – Anup

+0

En fait, il a la réponse répétée plusieurs fois avec les avertissements appropriés que c'est un problème de performance pour utiliser une recherche insensible à la casse dans MongoDB. '/ i' est ignorer la casse. – WiredPrairie

Répondre

2

Ajouter $options à votre opérateur $regex:

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

Ainsi, le "i" il rend le insensibles à la casse. Notez que l'appel d'une recherche insensible à la casse forcera au mieux l'indexation, même si vous ancrez ^ votre regex au début de la chaîne. Comme cela pourrait avoir un impact sur vos performances, envisagez d'autres options comme un index de recherche de texte et une requête ou modifiez le cas avec des champs supplémentaires ou dans votre saisie et stockez dans un format de cas unique si vous pouvez vous en sortir.

+0

Fonctionne bien ..! Merci ...! – Anup

+0

J'ai 1 autre question .... Si l'utilisateur tape 'a' & cherche ..... Il devrait obtenir des résultats dont le prénom commence par' a' .... mais dans ma requête actuelle, il vérifie la complète name & s'il y a 'a', il les affiche tous. – Anup

+0

@Annoncez le caret d'ancrage ou le caractère '^' au début de votre regex pour faire correspondre le début de la chaîne. J'ai déjà commenté cela avec plus d'informations pendant que vous posiez des commentaires. –