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

MongoDBで大文字と小文字を区別せずに特定の名前のドキュメントを取得するクエリ

MongoDBで、フィールド値の大文字と小文字の違いに関係なくドキュメントを検索したい場合には、$regex演算子を使用します。この記事では、「David」という名前を持つドキュメントを、大文字・小文字を問わず検索する方法を解説します。

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

まず、デモ用のコレクションにドキュメントを挿入します。意図的に「david」「DAVID」「David」など、大文字と小文字が異なる名前を登録している点に注目してください。

> db.demo700.insertOne( { details: [ { Name:"david" }]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6e6b1551299a9f98c93ac")
}
> db.demo700.insertOne( { details: [ { Name:"Chris" }]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6e6b9551299a9f98c93ad")
}
> db.demo700.insertOne( { details: [ { Name:"DAVID" }]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6e6bf551299a9f98c93ae")
}
> db.demo700.insertOne( { details: [ { Name:"David" }]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6e6c4551299a9f98c93af")
}

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

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

> db.demo700.find();

上記のクエリを実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5ea6e6b1551299a9f98c93ac"), "details" : [ { "Name" : "david" } ] }
{ "_id" : ObjectId("5ea6e6b9551299a9f98c93ad"), "details" : [ { "Name" : "Chris" } ] }
{ "_id" : ObjectId("5ea6e6bf551299a9f98c93ae"), "details" : [ { "Name" : "DAVID" } ] }
{ "_id" : ObjectId("5ea6e6c4551299a9f98c93af"), "details" : [ { "Name" : "David" } ] }

大文字小文字を区別せずに検索するクエリ

ここからが本題です。$regex演算子を使い、パターンの末尾にオプションフラグ「i」を付けることで、大文字と小文字を区別しない検索が可能になります。完全一致させたい場合は、正規表現のアンカー(^ と $)も併せて指定します。

> db.demo700.find({"details.Name":{$regex:/^David$/i}});

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

{ "_id" : ObjectId("5ea6e6b1551299a9f98c93ac"), "details" : [ { "Name" : "david" } ] }
{ "_id" : ObjectId("5ea6e6bf551299a9f98c93ae"), "details" : [ { "Name" : "DAVID" } ] }
{ "_id" : ObjectId("5ea6e6c4551299a9f98c93af"), "details" : [ { "Name" : "David" } ] }

結果のポイント

出力を見ると、「david」「DAVID」「David」という3件のドキュメントだけが取得され、「Chris」は除外されていることが分かります。これは以下の理由によるものです。

  • /^David$/ii フラグにより、大文字・小文字の違いを無視して比較されます。
  • ^(先頭)と $(末尾)のアンカーにより、「David」という文字列に完全一致する値のみが対象となります。

なお、部分一致でもよい場合は /^David/i や /David/i のようにアンカーを外してください。ただし、その場合は「Davidson」などの別の名前もマッチする可能性があるため、用途に応じて使い分けることが重要です。

  1. MongoDBで$in演算子を使って特定の複数ドキュメントを取得する方法

    MongoDBで特定の複数のドキュメントを一度に取得したい場合、$in 演算子を使用します。$in は、指定した配列内のいずれかの値に一致するドキュメントだけを抽出できる便利な比較演算子です。この記事では、実際にコレクションを作成し、$in を使って特定の複数ドキュメントを取得する手順を順番に解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne() メソッドを使ってサンプル用のコレクション「demo593」にドキュメントを挿入します。> db.demo593.insertOne({id:1,Name:Chris});{ acknowledged : tr

  2. MongoDBで1つのクエリを使って複数のドキュメントを一括更新する方法(bulkWrite活用ガイド)

    MongoDBで1つのクエリで複数のドキュメントを更新するには?MongoDBで1回のリクエスト(1つのクエリ)で複数のドキュメントを効率的に更新したい場合は、bulkWrite()メソッドを使用します。bulkWrite()は、複数の書き込み操作(insert、update、deleteなど)をまとめてサーバーに送信できるため、個別にクエリを発行するよりもパフォーマンス面で優れています。ここでは、updateOne操作を組み合わせて、複数のドキュメントのフィールドを一度に更新する手順を具体的に解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って