MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBの$regex演算子で大文字と小文字を区別しない検索を行う方法(iオプション)


MongoDBで大文字と小文字を区別せずに文字列検索を行いたい場合は、$regex演算子に「i」(case insensitive:大文字と小文字を区別しない)オプションを指定します。この記事では、実際にコレクションを作成し、「mongodb」という文字列を表記の違いにかかわらずすべて取得する方法を、サンプルコード付きで解説します。

ドキュメントを含むコレクションの作成

まず、insertOne()メソッドを使って、異なる表記(MySQL、MongoDB、mongodb、MONGODB)のドキュメントを持つコレクションを作成しましょう。

> db.demo759.insertOne({SubjectName:"MySQL"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5eb02ba95637cd592b2a4ae7")
}
> db.demo759.insertOne({SubjectName:"MongoDB"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5eb02baa5637cd592b2a4ae8")
}
> db.demo759.insertOne({SubjectName:"mongodb"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5eb02baf5637cd592b2a4ae9")
}
> db.demo759.insertOne({SubjectName:"MONGODB"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5eb02bb85637cd592b2a4aea")
}

find()メソッドですべてのドキュメントを表示

次に、find()メソッドを使って、コレクション内のすべてのドキュメントを確認してみます。

> db.demo759.find();

これにより、以下のような出力が得られます。

{ "_id" : ObjectId("5eb02ba95637cd592b2a4ae7"), "SubjectName" : "MySQL" }
{ "_id" : ObjectId("5eb02baa5637cd592b2a4ae8"), "SubjectName" : "MongoDB" }
{ "_id" : ObjectId("5eb02baf5637cd592b2a4ae9"), "SubjectName" : "mongodb" }
{ "_id" : ObjectId("5eb02bb85637cd592b2a4aea"), "SubjectName" : "MONGODB" }

ご覧のとおり、4つのドキュメントにはそれぞれ異なる表記の文字列が格納されています。

$regex演算子で大文字と小文字を区別しない検索を実行

ここで、$regex演算子に「i」オプションを付けたクエリを実行します。これにより、大文字と小文字の違いを無視して「mongodb」に一致するすべてのドキュメントを取得できます。

> db.demo759.find({"SubjectName":{$regex:/mongodb/i}});

実行結果は以下のとおりです。

{ "_id" : ObjectId("5eb02baa5637cd592b2a4ae8"), "SubjectName" : "MongoDB" }
{ "_id" : ObjectId("5eb02baf5637cd592b2a4ae9"), "SubjectName" : "mongodb" }
{ "_id" : ObjectId("5eb02bb85637cd592b2a4aea"), "SubjectName" : "MONGODB" }

まとめ

$regex演算子に「i」フラグを指定することで、MongoDBでも大文字と小文字を意識せずに柔軟な文字列検索が可能になります。ユーザーの入力値を検索する場合など、表記ゆれを許容したいシーンで特に便利です。ただし、$regex検索ではインデックスが活用されないケースがあるため、大量のデータを扱う際はパフォーマンスへの影響にも注意しましょう。

  1. MongoDBで大文字と小文字を区別せずに検索する方法($regexの使い方)

    MongoDBで大文字と小文字を区別しない(ケースインセンシティブな)検索を実行したい場合は、find()メソッドの中で正規表現($regex)を使用します。基本となる構文は以下の通りです。db.demo572.find({yourFieldName : { $regex : /^yourValue$/i}});正規表現のポイントこの構文で重要なのは、パターンの末尾に付ける「i」オプションです。このフラグを指定することで、マッチング時に大文字と小文字の違いが無視されます。また、^(先頭)と$(末尾)で値を囲むことで、部分一致ではなく完全一致の検索になります。それでは、実際にサンプルコレクション

  2. AEMとMongoDBの連携徹底解説:MongoMKのアーキテクチャとマルチサイト運用の落とし穴

    MongoDBとは何か?MongoDBは、ドキュメント指向のNoSQLデータベースです。従来のリレーショナルモデル(RDBMS)から離れ、柔軟かつ水平スケール可能なデータ管理の仕組みを提供します。JSONライクなドキュメント形式(BSON)でデータを格納するため、構造が流動的なコンテンツやアプリケーション開発に適しており、Adobe Experience Manager(AEM)のような大規模コンテンツ管理プラットフォームとの組み合わせでも注目されてきました。 AEMとMongoDBはどのように連携するのか?AEMとMongoDBの連携は、crx3mongo ランモードと、JVMオプションの