MongoDBの集計フレームワークで_idだけを除外する方法|$projectステージの使い方
MongoDBの集計フレームワーク(Aggregation Framework)では、$projectステージを使うことで、出力結果に含めるフィールドを柔軟に制御できます。デフォルトでは_idフィールドが必ず表示されますが、_id: 0を指定することでこれを除外できます。本記事では、実際にサンプルコレクションを作成しながら、_idだけを除外してデータを取得する手順をわかりやすく解説します。
サンプルコレクションの作成
まず、insertOne()メソッドを使って、ドキュメントを3件含むコレクションを作成します。
> db.excludeIdDemo.insertOne({"StudentFirstName":"John","StudentAge":21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd701a56d78f205348bc632")
}
> db.excludeIdDemo.insertOne({"StudentFirstName":"Robert","StudentAge":20});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd701af6d78f205348bc633")
}
> db.excludeIdDemo.insertOne({"StudentFirstName":"Chris","StudentAge":24});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd701b86d78f205348bc634")
}
find()メソッドで全ドキュメントを確認する
続いて、find()メソッドでコレクション内のすべてのドキュメントを表示してみましょう。
> db.excludeIdDemo.find();
実行すると、次のような結果が得られます。
{ "_id" : ObjectId("5cd701a56d78f205348bc632"), "StudentFirstName" : "John", "StudentAge" : 21 }
{ "_id" : ObjectId("5cd701af6d78f205348bc633"), "StudentFirstName" : "Robert", "StudentAge" : 20 }
{ "_id" : ObjectId("5cd701b86d78f205348bc634"), "StudentFirstName" : "Chris", "StudentAge" : 24 }
ご覧のとおり、各ドキュメントにはMongoDBが自動生成したObjectId型の_idフィールドが含まれています。
$projectステージで_idを除外する
_id以外のフィールドはそのままに、_idだけを除外したい場合は、集計パイプラインの$projectステージで以下のように指定します。
> db.excludeIdDemo.aggregate(
{
$project :
{
_id : 0,
"StudentFirstName": 1
}
}
);
実行結果は次のとおりです。
{ "StudentFirstName" : "John" }
{ "StudentFirstName" : "Robert" }
{ "StudentFirstName" : "Chris" }
_idフィールドが出力から取り除かれ、指定したStudentFirstNameだけが返されていることがわかります。
ポイント解説
- _id : 0 …
_idフィールドを出力から除外します。$projectステージにおいて、_idは例外的に「デフォルトで含まれる」フィールドであるため、明示的に0を指定しない限り必ず表示されます。 - "StudentFirstName": 1 … 出力に含めたいフィールドを1で指定します。
なお、$projectステージでは通常、フィールドの「包含(1)」と「除外(0)」を同時に混在させることはできませんが、_idフィールドのみは例外として、包含指定と併せて_id: 0と記述できます。この性質を活用することで、不要な_idを取り除き、必要なフィールドだけをきれいに抽出できます。
-
MongoDBで「_id」以外のすべてのフィールド値を表示するクエリ方法
MongoDBでは、ドキュメントを取得すると自動的に _id フィールドが含まれますが、場合によってはこのフィールドを除外し、他のフィールド値だけを表示したいことがあります。本記事では、コレクションの作成から、_id を除いたすべてのフィールド値を表示するまでの一連の手順を解説します。1. ドキュメントを含むコレクションを作成するまずは、サンプルとなるコレクションを作成しましょう。以下のコマンドを実行して、複数のドキュメントを一括挿入します。> db.demo590.insert([... { "Name": "
-
MongoDBの$projectで配列内の特定フィールドだけを表示し、他のフィールドを除外する方法
MongoDBの集計パイプライン(Aggregation Pipeline)では、$projectと$unwindを組み合わせることで、配列内の特定のフィールドだけを表示できます。逆に、不要なフィールドを除外したい場合は、そのフィールドの値を0に設定します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo731.insertOne({ ProductInformation: [ { ProductId:Product-1, ProductPrice:80 }, { ProductId:Product-2, ProductPrice:45