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

MongoDB正規表現を使って「john」ではなく「John」という特定の名前のレコードを取得する方法

はじめに

MongoDBで特定の単語を検索する場合、正規表現(regex)を利用して /searchWord/ の形式で指定します。正規表現を使うことで、大文字と小文字を区別した検索が可能になり、「john」ではなく「John」のように、正確な表記のレコードだけを取得できます。

この記事では、実際にコレクションを作成し、正規表現による検索の手順を順番に解説します。

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

まずは、ドキュメントを含むコレクションを作成しましょう。ここでは demo221 というコレクションに、学生の名前と年齢を格納したドキュメントを挿入します。

> db.demo221.insertOne({"Details":{"StudentName":"Chris","StudentAge":21}});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3ee15d03d395bdc213472b")
}
> db.demo221.insertOne({"Details":{"StudentName":"John","StudentAge":20}});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3ee16503d395bdc213472c")
}
> db.demo221.insertOne({"Details":{"StudentName":"Bob","StudentAge":22}});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3ee16b03d395bdc213472d")
}
> db.demo221.insertOne({"Details":{"StudentName":"john","StudentAge":24}});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3ee17303d395bdc213472e")
}

上記のコレクションには、「John」(大文字)と「john」(小文字)という、同じ名前でも大文字・小文字が異なる2件のドキュメントが含まれています。

登録済みドキュメントの確認

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

> db.demo221.find();

実行すると、以下のような出力が得られます。

{ "_id" : ObjectId("5e3ee15d03d395bdc213472b"), "Details" : { "StudentName" : "Chris", "StudentAge" : 21 } }
{ "_id" : ObjectId("5e3ee16503d395bdc213472c"), "Details" : { "StudentName" : "John", "StudentAge" : 20 } }
{ "_id" : ObjectId("5e3ee16b03d395bdc213472d"), "Details" : { "StudentName" : "Bob", "StudentAge" : 22 } }
{ "_id" : ObjectId("5e3ee17303d395bdc213472e"), "Details" : { "StudentName" : "john", "StudentAge" : 24 } }

正規表現で「John」のレコードを取得する

名前が「John」であるレコードのみを取得するには、次のようにクエリを記述します。

> db.demo221.find({"Details.StudentName":/John/});

このクエリを実行すると、以下の出力が得られます。

{ "_id" : ObjectId("5e3ee16503d395bdc213472c"), "Details" : { "StudentName" : "John", "StudentAge" : 20 } }

ポイントの解説

  • 正規表現 /John/ はデフォルトで大文字と小文字を区別するため、「John」に一致するレコードのみが返され、「john」は除外されます。
  • ネストされたフィールドを検索する場合は、"Details.StudentName" のようにドット記法でパスを指定します。
  • もし大文字・小文字を区別せずに検索したい場合は、/john/i のようにオプション i を付けることで、両方のレコードを取得できます。

まとめ

MongoDBでは、正規表現を find() の条件として渡すだけで、柔軟な文字列検索が実現できます。大文字・小文字の違いまで厳密に判定したいケースでは、そのまま /John/ を使うのが有効です。逆に曖昧検索を行いたい場合は、正規表現オプションを組み合わせることで対応可能です。用途に応じて使い分けましょう。

  1. MongoDBで配列をクエリして特定の値を取得する方法

    配列から特定の値を取得するには、aggregate()メソッドと$projectステージを組み合わせて使用します。まずは、ドキュメントを含むコレクションを作成してみましょう。 > db.demo761.insertOne( ...    { ...        "details": [ ...            { ...                "

  2. MySQLで特定の重複レコードを新しい値に一括置換する方法

    MySQLでは、UPDATE文とREPLACE()関数を組み合わせることで、テーブル内に存在する特定の重複レコード(同じ値が複数含まれるデータ)を、まとめて新しい値に置き換えることができます。本記事では、実際にサンプルテーブルを作成しながら、その手順をわかりやすく解説します。 1. サンプルテーブルを作成する まず、以下のようにテーブルを作成します。 mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(50) ); Query OK, 0 rows