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

MongoDBのfind()クエリで配列内の値を取得する方法【ドット表記の使い方】


MongoDBのfind()クエリで配列内の値を取得するには、ドット表記(dot notation)を使用します。ドット表記とは「親フィールド名.子フィールド名」の形式でフィールドを指定する記法で、配列内の埋め込みドキュメントに対しても自動的に適用されます。まずは、ドキュメントを含むコレクションを作成してみましょう。

> db.demo38.insertOne({"ClientDetails":[{"ClientId":101,"ClientName":"Chris"}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e176abccfb11e5c34d898d9")
}
> db.demo38.insertOne({"ClientDetails":[{"ClientId":102,"ClientName":"David"}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e176ac7cfb11e5c34d898da")
}
> db.demo38.insertOne({"ClientDetails":[{"ClientId":103,"ClientName":"Mike"}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e176ad0cfb11e5c34d898db")
}

コレクション内の全ドキュメントを表示する

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

> db.demo38.find();

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

{ "_id" : ObjectId("5e176abccfb11e5c34d898d9"), "ClientDetails" : [ { "ClientId" : 101, "ClientName" : "Chris" } ] }
{ "_id" : ObjectId("5e176ac7cfb11e5c34d898da"), "ClientDetails" : [ { "ClientId" : 102, "ClientName" : "David" } ] }
{ "_id" : ObjectId("5e176ad0cfb11e5c34d898db"), "ClientDetails" : [ { "ClientId" : 103, "ClientName" : "Mike" } ] }

ドット表記で配列内の値を検索する

続いて、find()クエリで配列内の値を取得する方法を見ていきましょう。ここでは、「ClientName」が「David」であるドキュメントを検索します。

> db.demo38.find({"ClientDetails.ClientName":"David"});

実行結果は次のとおりです。「ClientDetails」配列内の「ClientName」フィールドが「David」と一致するドキュメントのみが返されていることが確認できます。

{ "_id" : ObjectId("5e176ac7cfb11e5c34d898da"), "ClientDetails" : [ { "ClientId" : 102, "ClientName" : "David" } ] }

ポイントまとめ

  • 配列内の埋め込みドキュメントのフィールドを照会する場合は、"ClientDetails.ClientName" のようなドット表記を使用します。
  • ドット表記による検索では、配列内のどれか1つの要素でも条件に一致すれば、そのドキュメント全体が結果として返されます。
  • 一致した配列要素だけを取り出したい場合は、位置演算子($)やプロジェクション、集計フレームワークの $filter 演算子などを組み合わせて利用します。
  1. 【MongoDB】配列内の値を指定して一致するドキュメントを検索するクエリ

    $in演算子とは配列フィールドに複数の候補値のいずれかが含まれるドキュメントを検索したい場合、MongoDBでは$in演算子を使用します。まずは、サンプルとなるドキュメントを挿入してコレクションを作成してみましょう。> db.demo511.insertOne({ListOfProject:[Library Management System,Hospital Management System]}); { acknowledged : true, insertedId : ObjectId(5e88473a987b6e0e9d18f585) } > db.demo51

  2. MongoDBでコレクションから配列フィールド全体を削除するクエリの書き方

    MongoDBで配列フィールドを完全に削除するにはMongoDBのコレクションから、ドキュメント内の配列フィールドそのもの(フィールドごと)を取り除きたい場合は、更新演算子の $unset を使用します。$unset は指定したフィールドをドキュメントから削除する演算子で、配列の中身だけを空にするのではなく、フィールド自体が存在しない状態にできます。ここでは、サンプルコレクションを作成して、実際に配列フィールドを削除する手順を見ていきましょう。1. サンプルコレクションの作成まず、insertOne() メソッドを使ってドキュメントを挿入し、テスト用のコレクション demo609 を作成します