【MongoDB】_id以外の値だけを表示する方法 ― aggregateと$projectの使い方
_idフィールドを除外してデータを表示するには
MongoDBでコレクションのドキュメントを取得する際、デフォルトでは自動生成される「_id」フィールドも一緒に表示されます。この _id を除き、必要なフィールドだけを表示したい場合には、集計パイプライン(aggregate)内の $project ステージを使用します。
$projectステージでは、以下のような操作が可能です。
- 表示するフィールドの指定(包含)
- _id フィールドの非表示(抑制)
- 新しいフィールドの追加
- 既存フィールドの値のリセット(名前の変更など)
今回は、これらの機能を使って「_idを除いた全ての値」を表示する方法を解説します。
1. サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。ここでは insertOne() メソッドを使用して、3件のドキュメントを挿入します。
> db.demo226.insertOne({"Name":"Chris","Age":21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3f9be803d395bdc2134738")
}
> db.demo226.insertOne({"Name":"Bob","Age":20});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3f9bf003d395bdc2134739")
}
> db.demo226.insertOne({"Name":"David","Age":22});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3f9bf803d395bdc213473a")
}2. find()メソッドで全ドキュメントを確認
続いて、find() メソッドを使ってコレクション内の全ドキュメントを表示してみます。
> db.demo226.find();
実行すると、次のような出力が得られます。各ドキュメントに ObjectId 型の _id が自動的に付与されているのが分かります。
{ "_id" : ObjectId("5e3f9be803d395bdc2134738"), "Name" : "Chris", "Age" : 21 }
{ "_id" : ObjectId("5e3f9bf003d395bdc2134739"), "Name" : "Bob", "Age" : 20 }
{ "_id" : ObjectId("5e3f9bf803d395bdc213473a"), "Name" : "David", "Age" : 22 }3. $projectを使って_idを除外するクエリ
それが本題です。$project を使って _id 以外の値を表示するクエリは以下の通りです。
ポイントは 「_id: false」 を指定することです。これにより _id フィールドが出力から除外されます。さらに、「Name」フィールドを「StudentFirstName」、「Age」フィールドを「StudentAge」という新しいフィールド名にマッピングしています。
> db.demo226.aggregate(
... {$project:
... {
... _id: false,
... "StudentFirstName":"$Name",
... "StudentAge":"$Age"
... }
... }
... );実行結果
上記のクエリを実行すると、次のように _id を含まない結果が得られます。フィールド名も新しい名称に置き換わっている点にも注目してください。
{ "StudentFirstName" : "Chris", "StudentAge" : 21 }
{ "StudentFirstName" : "Bob", "StudentAge" : 20 }
{ "StudentFirstName" : "David", "StudentAge" : 22 }まとめ
MongoDBで _id 以外の値だけを表示したい場合は、aggregateの $project ステージで 「_id: false」 を指定します。同時に既存フィールドの値を別のフィールド名に割り当てることで、出力形式を自由にカスタマイズすることもできます。APIレスポンスやレポート出力など、不要なIDを隠したい場面で非常に便利なテクニックなので、ぜひ活用してみてください。
-
MongoDBで特定の文字列を使ってフィールドのすべての値を一括更新する方法
MongoDBでフィールドのすべての値を一括更新する方法MongoDBのコレクション内に存在するすべてのドキュメントの特定フィールドを、同じ文字列でまとめて更新したい場合があります。そのようなときは、update()メソッドにオプション「multi: true」を指定します。この記事では、実際のコマンド例をもとに、手順をわかりやすく解説します。1. サンプルコレクションの作成まずはinsertOne()メソッドを使って、テスト用コレクション「demo720」に複数のドキュメントを挿入します。> db.demo720.insertOne({SubjectName:MySQL}); {
-
MongoDBでフィールド値に含まれる「@email」のような文字列を検索する方法
MongoDBのfind()メソッドを使えば、正規表現(Regex)を活用して、フィールド値の中から特定の文字列を柔軟に検索できます。本記事では、「@email」という文字列を含むドキュメントを検索する方法を、実際のコード例とともに解説します。1. 検索用コレクションの作成まずは、メールアドレスを格納したドキュメントを持つコレクションを作成しましょう。> db.demo727.insertOne({UserId:John@email.com}); { acknowledged : true, insertedId : ObjectId(5eab375f4341781127