$project (射影)

最終更新:2026-10-09

$project (射影)

$project は射影ステージです。フィールドの選択・除外・新規計算を行い、各ドキュメントを新しい形に変換します。$addFields と違い、デフォルトでは _id と明示したフィールドだけを出力します: 1 は含める、0 は除外、式は新しいフィールドを作成します。ドキュメントの圧縮、フィールド名の変更、埋め込みオブジェクトの平坦化に使います。包含と除外は混在できません(_id を除く)。

カテゴリコアステージ
MongoDB バージョン1.0+
例の言語mongosh(シェル)

📝 構文

{ $project: { <field>: <1 or 0 or expression>, ... } }

⚙️ パラメータ

フィールド射影フィールド名を 1(含める)、0(除外する)、または集計式(計算フィールド)にマッピングします。

戻り値:射影されたドキュメントストリーム

▶ 例

以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):

// $project: name を保持し、total を計算
db.orders.aggregate([
  { $project: { _id: 0, name: 1, total: { $multiply: ['$price', '$qty'] } } }
])

出力:

// 各ドキュメントは name と total だけになる
{ "name": "Pen", "total": 150 }
{ "name": "Book", "total": 30 }

📌 注意事項

📚 関連チュートリアル

❓ よくある質問

Q$project と $addFields の違いは?
A$addFields は元のフィールドをすべて保持して新フィールドを追加します。$project はデフォルトで指定外のフィールドを落とし、ドキュメントの整形・再構築に使います。
Q$project で複数フィールドを同時に除外できますか?
Aはい。すべて 0 にします。たとえば { $project: { secret: 0, log: 0 } } とすると、他のフィールドはすべて保持されます。
Q$project はフィールドの順序を変えますか?
A出力フィールドは射影に書いた順序になり、元のドキュメントの順序には依存しません。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%