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

正規表現($regex)を使ってMongoDBで特定の値を含むドキュメントを検索する方法

MongoDBで特定の値(文字列)を含むドキュメントを検索したい場合、正規表現を扱う$regex演算子を使用します。さらに「$options」オプションを組み合わせることで、大文字・小文字を区別しない柔軟な部分一致検索も可能になります。

本記事では、実際にコレクションを作成し、$regexを使って特定の文字列を含むドキュメントを抽出する手順をサンプルコード付きで解説します。

1. サンプルコレクションの作成

まず、ドキュメントを挿入してテスト用のコレクションを作成します。ここでは「demo469」というコレクションに、学生名(StudentName)のデータを登録していきます。

> db.demo469.insertOne({"StudentName":"John Doe"});{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e80532fb0f3fa88e227906b")
}
> db.demo469.insertOne({"StudentName":"Chris Brown"});{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e80533ab0f3fa88e227906c")
}
> db.demo469.insertOne({"StudentName":"John Smith"});{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e805341b0f3fa88e227906d")
}
> db.demo469.insertOne({"StudentName":"Jace Doe"});{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e805347b0f3fa88e227906e")
}
> db.demo469.insertOne({"StudentName":"David Miller"});{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e80534eb0f3fa88e227906f")
}

2. 登録したドキュメントの確認

find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。

> db.demo469.find();

上記のコマンドを実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e80532fb0f3fa88e227906b"), "StudentName" : "John Doe" }
{ "_id" : ObjectId("5e80533ab0f3fa88e227906c"), "StudentName" : "Chris Brown" }
{ "_id" : ObjectId("5e805341b0f3fa88e227906d"), "StudentName" : "John Smith" }
{ "_id" : ObjectId("5e805347b0f3fa88e227906e"), "StudentName" : "Jace Doe" }
{ "_id" : ObjectId("5e80534eb0f3fa88e227906f"), "StudentName" : "David Miller" }

3. $regexを使った検索クエリの実行

それでは、特定の値を含むドキュメントを検索してみましょう。次のクエリでは、「StudentName」フィールドに「john」という文字列を含むドキュメントを検索しています。

> db.demo469.find({'StudentName': {'$regex':'john', '$options':'i'}});

ポイントは'$options':'i'の指定です。これにより大文字・小文字を区別せずに検索できるため、「John Doe」のように大文字で始まる名前もヒットします。実行結果は以下の通りです。

{ "_id" : ObjectId("5e80532fb0f3fa88e227906b"), "StudentName" : "John Doe" }
{ "_id" : ObjectId("5e805341b0f3fa88e227906d"), "StudentName" : "John Smith" }

4. $regex活用のポイントまとめ

  • 部分一致検索: '$regex' に検索したい文字列を指定すると、その文字列を含むすべてのドキュメントが取得できます。
  • 大文字・小文字を無視: '$options':'i' を指定することで、英字の大小を区別せずに検索できます。
  • 前方一致・後方一致: 「^john」で前方一致、「doe$」で後方一致の検索も可能です。

このように、$regex演算子を使えばSQLのLIKE句のような柔軟な文字列検索をMongoDBでも簡単に実現できます。ただし、大量データに対する正規表現検索はインデックスを利用できない場合がありパフォーマンスに影響することがあるため、運用環境では注意が必要です。

  1. MongoDBシェルで特定の値を持つドキュメントを取得する方法をわかりやすく解説

    MongoDBシェルを使って特定の値を持つアイテムを取得する方法MongoDBで特定の値を持つドキュメントを取得したい場合、find()メソッドを使用するのが基本です。この記事では、サンプルコレクションを作成し、実際にfind()メソッドを使って条件に合うデータを抽出する手順を詳しく解説します。1. サンプルコレクションの作成まずはinsertOne()メソッドを使って、テスト用のコレクション「demo563」に複数のドキュメントを挿入します。> db.demo563.insertOne({Name:Chris,Age:21,isMarried:true}){ acknowled

  2. MongoDBで特定の値以上のドキュメントを検索する方法($gte演算子の使い方)

    MongoDBで特定の値「以上」の値を持つドキュメントを検索したい場合、比較演算子 $gte(greater than or equal)を使用します。$gte は指定した値と等しいか、それより大きい値に一致するドキュメントを抽出できる便利な演算子です。$gteを使った基本構文db.yourCollectionName.find({yourFieldName:{$gte:yourValue}});コレクション名、フィールド名、基準となる値をそれぞれ置き換えて使用します。なお、「より大きい」値のみを取得したい場合は $gt を使いますが、ここでは「以上」を意味する $gte を採用しています。サ