$addFields (フィールド追加)
最終更新:2026-10-09
$addFields (フィールド追加)
$addFields は、各ドキュメントに新しいフィールドを追加したり既存フィールドを上書きしたりしつつ、他のフィールドはすべて保持します。指定外のフィールドをデフォルトで落とす $project とは違い、$addFields はドキュメントを増やすだけです。新しい値には任意の集計式を指定でき、$lookup の結果から計算することが多いです。MongoDB 3.4 以降は $set と同じ機能です。
| カテゴリ | コアステージ |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $addFields: { <newField>: <expression>, ... } }
⚙️ パラメータ
| 新しいフィールド | 入力ドキュメントのフィールドを参照する式にフィールド名をマッピングします。 |
|---|
戻り値:フィールドを追加または上書きしたドキュメントストリーム
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $addFields: total フィールドを追加
db.sales.aggregate([
{ $addFields: { total: { $multiply: ['$price', '$qty'] } } }
])
出力:
// 元のフィールドはすべて保持され、total が追加される
{ "item": "Pen", "price": 50, "qty": 3, "total": 150 }
📌 注意事項
- $addFields は既存フィールドを削除しない
- 'order.amount' のようなドットパスで埋め込みフィールドを参照できる
- 同じステージ内で自分が定義したフィールドを参照することはできない
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q$addFields と $set の違いは?
AMongoDB 3.4 以降は完全に同じ機能で、$addFields が古い名前です。
Q$addFields は自分が追加したフィールドを参照できますか?
Aいいえ。1 つのステージ内の式は入力ドキュメントしか見られません。複数フィールドの依存関係は $addFields ステージを連ねて解決します。
Q$addFields は既存フィールドを上書きしますか?
Aはい。同名フィールドは上書きされます。