MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment faire des requêtes insensibles à la casse sur Mongodb ?

La solution de Chris Fulstow fonctionnera (+1), cependant, elle peut ne pas être efficace, surtout si votre collection est très grande. Expressions régulières non rootées (celles ne commençant pas par ^ , qui ancre l'expression régulière au début de la chaîne), et celles utilisant le i l'indicateur d'insensibilité à la casse n'utilisera pas les index, même s'ils existent.

Une autre option que vous pourriez envisager consiste à dénormaliser vos données pour stocker une version en minuscules du name champ, par exemple comme name_lower . Vous pouvez ensuite interroger cela efficacement (surtout s'il est indexé) pour les correspondances exactes insensibles à la casse comme :

db.collection.find({"name_lower": thename.toLowerCase()})

Ou avec une correspondance de préfixe (une expression régulière enracinée) comme :

db.collection.find( {"name_lower":
    { $regex: new RegExp("^" + thename.toLowerCase(), "i") } }
);

Ces deux requêtes utiliseront un index sur name_lower .