Řešení Chrise Fulstow bude fungovat (+1), ale nemusí být efektivní, zvláště pokud je vaše sbírka velmi velká. Nekořenové regulární výrazy (ty, které nezačínají ^
, který ukotvuje regulární výraz na začátek řetězce) a ty, které používají i
příznak pro nerozlišování velkých a malých písmen nebude používat indexy, i když existují.
Alternativní možností, kterou byste mohli zvážit, je denormalizovat svá data tak, aby byla uložena malá verze názvu name
pole, například jako name_lower
. Poté se můžete efektivně dotazovat (zejména pokud je indexováno) na přesné shody bez rozlišení velkých a malých písmen jako:
db.collection.find({"name_lower": thename.toLowerCase()})
Nebo se shodou předpony (kořenový regulární výraz) jako:
db.collection.find( {"name_lower":
{ $regex: new RegExp("^" + thename.toLowerCase(), "i") } }
);
Oba tyto dotazy budou používat index na name_lower
.