Chris Fulstowのソリューションは機能します(+1)が、特にコレクションが非常に大きい場合は、効率的ではない可能性があります。ルート化されていない正規表現(^
で始まらないもの 、正規表現を文字列の先頭に固定します)、およびi
を使用するもの 大文字と小文字を区別しないフラグは、インデックスが存在する場合でも、インデックスを使用しません。
検討する可能性のある別のオプションは、データを非正規化して、小文字バージョンのname
を格納することです。 フィールド、たとえばname_lower
。次に、次のように大文字と小文字を区別しない完全一致を効率的に(特にインデックス付けされている場合)クエリできます。
db.collection.find({"name_lower": thename.toLowerCase()})
または、プレフィックスが一致する場合(ルート化された正規表現):
db.collection.find( {"name_lower":
{ $regex: new RegExp("^" + thename.toLowerCase(), "i") } }
);
これらのクエリは両方とも、name_lower
のインデックスを使用します 。