MongoDBのクエリでドット表記を使ってフィールドを選択する方法
MongoDBのfind()メソッドでは、ドット表記(ドット・ノーテーション)を使うことで、配列やネストされたドキュメント内の特定のフィールドだけを選択的に取得できます。この記事では、実際のコード例を通じて、ドット表記によるフィールド選択の方法をわかりやすく解説します。
サンプルコレクションの作成
まず、デモ用のコレクションにドキュメントを挿入してみましょう。insertOne()メソッドを使って、3件のドキュメントを作成します。
> db.demo302.insertOne({"Id":101,"details":[{"Name":"Chris",Age:21,"Subject":"MySQL"}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4d746f5d93261e4bc9ea52")
}
> db.demo302.insertOne({"Id":102,"details":[{"Name":"Bob",Age:23,"Subject":"MongoDB"}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4d74815d93261e4bc9ea53")
}
> db.demo302.insertOne({"Id":103,"details":[{"Name":"David",Age:20,"Subject":"Java"}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4d74955d93261e4bc9ea54")
}すべてのドキュメントを表示する
続いて、find()メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo302.find();
上記のクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e4d746f5d93261e4bc9ea52"), "Id" : 101, "details" : [ { "Name" : "Chris", "Age" : 21, "Subject" : "MySQL" } ] }
{ "_id" : ObjectId("5e4d74815d93261e4bc9ea53"), "Id" : 102, "details" : [ { "Name" : "Bob", "Age" : 23, "Subject" : "MongoDB" } ] }
{ "_id" : ObjectId("5e4d74955d93261e4bc9ea54"), "Id" : 103, "details" : [ { "Name" : "David", "Age" : 20, "Subject" : "Java" } ] }ドット表記を使ったフィールド選択のクエリ
それが本題である、ドット表記を使用したフィールド選択のクエリです。以下の例では、クエリ条件に"details.Subject": "MongoDB"を指定して該当するドキュメントを絞り込み、射影(プロジェクション)の部分で"details.Name"、"details.Age"、_id、Idに0を設定することで、これらのフィールドを結果から除外しています。
>db.demo302.find({"details.Subject":"MongoDB"},{"details.Name":0,"details.Age":0,_id:0,Id:0});実行結果は以下の通りです。射影によって不要なフィールドが除外され、Subjectフィールドだけが取得できていることがわかります。
{ "details" : [ { "Subject" : "MongoDB" } ] }まとめ
MongoDBでは、ドット表記を使うことで、配列内のオブジェクトが持つネストされたフィールドに対して、柔軟な検索条件の指定とフィールドの取捨選択(射影)が可能になります。射影では、取得したいフィールドに1、除外したいフィールドに0を指定します。必要なデータだけを効率よく取り出すことで、アプリケーションのパフォーマンス向上にもつながります。
-
【MongoDB】idがドキュメント内の配列フィールドの値と一致する場合に除外するクエリの書き方
MongoDBでは、ドキュメントの id フィールドの値が、同一ドキュメント内の配列型フィールド(例: subjectid)に含まれている場合に、そのドキュメントを検索結果から除外したいケースがあります。このような条件を実現するには、 $expr 演算子と組み合わせて $not および $in を使用します。本記事では、サンプルコレクションの作成からクエリの実行、出力結果の確認までを順を追って解説します。 サンプルコレクションの作成 まずは、動作確認用のドキュメントを含むコレクションを作成します。ここでは、 id フィールドと、文字列の配列を持つ subjectid フィールドを備えた2件のド
-
単純なクエリを使ってMongoDBのドキュメントをフィルタリングする方法
$match演算子によるドキュメントのフィルタリングMongoDBで単純なクエリを使ってドキュメントをフィルタリングするには、集計パイプライン(aggregate)の中で$match演算子を使用します。$matchは、指定された条件に一致するドキュメントだけを次のパイプラインステージへ通過させる役割を持つステージです。まずは、ドキュメントを含むコレクションを作成してみましょう。> db.demo629.insertOne(... {... "Subje