Die Lösung von Chris Fulstow funktioniert (+1), ist jedoch möglicherweise nicht effizient, insbesondere wenn Ihre Sammlung sehr groß ist. Reguläre Ausdrücke ohne Root (die nicht mit ^
beginnen , die den regulären Ausdruck am Anfang der Zeichenfolge verankert), und diejenigen, die das i
verwenden Flag für Groß- und Kleinschreibung wird keine Indizes verwenden, selbst wenn sie existieren.
Eine alternative Option, die Sie in Betracht ziehen könnten, besteht darin, Ihre Daten zu denormalisieren, um eine kleingeschriebene Version des name
zu speichern Feld, zum Beispiel als name_lower
. Sie können dies dann effizient (insbesondere wenn es indiziert ist) nach exakten Übereinstimmungen ohne Berücksichtigung der Groß-/Kleinschreibung abfragen wie:
db.collection.find({"name_lower": thename.toLowerCase()})
Oder mit einer Präfixübereinstimmung (ein verwurzelter regulärer Ausdruck) als:
db.collection.find( {"name_lower":
{ $regex: new RegExp("^" + thename.toLowerCase(), "i") } }
);
Beide Abfragen verwenden einen Index für name_lower
.