$setField (名前によるフィールド設定)

最終更新:2026-10-09

$setField (名前によるフィールド設定)

$setField はドキュメントに名前付きフィールドを追加・更新し、入力は変更せず新しいドキュメントを返します。構文は { $setField: { field: フィールド名, input: ドキュメント, value: 式 } } で、field には動的な式を指定できます。value が null の場合はフィールドが削除されます。特殊文字を含むフィールド名や、動的に計算する必要があるフィールド名で使われます。null または欠落の入力は null を返します。$set ステージと違い、$setField は入れ子の式の中で動作し、動的なフィールド名をサポートします。

カテゴリリテラル・変数・オブジェクト
MongoDB バージョン5.0+
例の言語mongosh(シェル)

📝 構文

{ $setField: { field: <field-name>, input: <document-expression>, value: <expression> } }

⚙️ パラメータ

field文字列としてのフィールド名、または文字列に解決される式。
input対象ドキュメント。入力が null または欠落している場合は null になります。
value設定する値。null の場合はフィールドを削除します。

戻り値:フィールドを設定した新しいドキュメント。入力が null または欠落している場合は null

▶ 例

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

// $setField: 各注文に税率フィールドを追加
db.orders.aggregate([
  { $project: {
      doc: { $setField: { field: 'taxRate', input: '$$CURRENT', value: 0.08 } }
  } }
])

出力:

{ '_id': 1, 'doc': { '_id': 1, 'price': 100, 'taxRate': 0.08 } }
{ '_id': 2, 'doc': { '_id': 2, 'price': 50, 'taxRate': 0.08 } }

📌 注意事項

さらなる実践ケースを近日公開予定。

📚 関連チュートリアル

❓ よくある質問

Q$setField は元のドキュメントを変更しますか?
Aいいえ — パイプライン内のドキュメントは変更されません。$setField は新しいドキュメントを返します。
Qフィールドを削除するには?
Avalue に null を設定すると、フィールドが削除されます。
Q$setField と $set ステージの違いは?
A$set は静的なフィールド名だけを扱います。$setField は動的な名前と入れ子の式に対応します。
Web-Tutorial.com

Web-Tutorial 技術チーム

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

100%