MongoDBクエリでドキュメントから特定のフィールドのみを選択して表示する方法
MongoDBでは、find()メソッドの第2引数に「射影(プロジェクション)」を指定することで、ドキュメントから必要なフィールドだけを取り出して表示できます。すべてのデータを取得するのではなく特定のフィールドに絞り込むことで、通信量の削減やクエリパフォーマンスの向上が期待できます。
サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。
> db.querySelectDemo.insertOne({UserId:100,UserName:"Chris",UserAge:25});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ce90eb478f00858fb12e90e")
}
> db.querySelectDemo.insertOne({UserId:101,UserName:"Robert",UserAge:26});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ce90ec578f00858fb12e90f")
}
> db.querySelectDemo.insertOne({UserId:103,UserName:"David",UserAge:27});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ce90ed478f00858fb12e910")
}
すべてのドキュメントを表示する
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.querySelectDemo.find().pretty();
実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5ce90eb478f00858fb12e90e"),
"UserId" : 100,
"UserName" : "Chris",
"UserAge" : 25
}
{
"_id" : ObjectId("5ce90ec578f00858fb12e90f"),
"UserId" : 101,
"UserName" : "Robert",
"UserAge" : 26
}
{
"_id" : ObjectId("5ce90ed478f00858fb12e910"),
"UserId" : 103,
"UserName" : "David",
"UserAge" : 27
}
特定のフィールドのみを選択して表示する
射影を利用するには、find()の第2引数で表示したいフィールドをtrueに設定します。なお、_idフィールドはデフォルトで常に結果に含まれるため、不要な場合は_id:0を明示的に指定して除外します。
> db.querySelectDemo.find({},{_id:0,UserName:true});
実行すると、「UserName」フィールドだけが抽出された結果が表示されます。
{ "UserName" : "Chris" }
{ "UserName" : "Robert" }
{ "UserName" : "David" }
ポイントまとめ
find(条件, 射影)の第2引数で、取得したいフィールドをtrue(または1)に設定する_idフィールドはデフォルトで常に含まれるため、不要な場合は_id:0を指定して除外する- 射影を活用することで、必要なデータだけを効率的に取得でき、アプリケーションの応答速度向上にもつながる
-
MongoDBで一意のレコードのみを表示し、重複データを除外する方法
MongoDBのdistinct()メソッドで重複を除外するMongoDBで一意(ユニーク)なレコードのみを表示したい場合は、distinct()メソッドを使用します。このメソッドは、指定したフィールドの重複しない値だけを配列として返してくれます。ここでは、実際にサンプルコレクションを作成しながら、その使い方を確認していきましょう。1. サンプルコレクションの作成まず、insertOne()メソッドを使って、意図的に重複した名前を含むドキュメントをいくつか挿入します。> db.demo613.insertOne({Name:Chris});{ acknowledged : tru
-
【MongoDB】ネストされたドキュメントのキー名のみを抽出して表示する方法
MongoDBでは、配列内にネストされたドキュメント(サブドキュメント)のキー名だけを一覧として取得したいケースがあります。本記事では、insertOne()でサンプルデータを作成し、find()で内容を確認した後、集計パイプラインの$reduce、$objectToArray、$map、$concatArraysを組み合わせて、ネストされたドキュメントのキー名のみを抽出する方法を実行例付きで解説します。 1. サンプルコレクションの作成 まず、insertOne()メソッドを使って、detailsフィールドに複数のドキュメントを持つ配列を含むコレクションを作成します。 > db.dem