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
.