sql >> データベース >  >> NoSQL >> MongoDB

Mongodbで大文字と小文字を区別しないクエリを作成するにはどうすればよいですか?

    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のインデックスを使用します 。



    1. ElasticCacheRedisキャッシュノードに接続するJavaクライアント

    2. MongoDBネストされたオブジェクトの被写界深度の制限

    3. 最新のMongoDBバージョンにアップグレードするためのヒント

    4. Mongodbの辞書を更新しています