1. ホーム
  2. regex

[解決済み] Mongodbで大文字小文字を区別しないクエリを作成するには?

2022-05-16 23:13:37

質問

var thename = 'Andrew';
db.collection.find({'name':thename});

大文字・小文字を区別しない問い合わせをするには?andrew"でも結果を見つけたいのですが。

どのように解決するのですか?

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 .