$set (フィールド設定)
最終更新:2026-10-09
$set (フィールド設定)
$set は、ドキュメント内の 1 つ以上のフィールドに値を代入(または上書き)します。フィールドが存在しない場合は作成され、ネストしたフィールドにはドット記法のパスが使えます。最もよく使われる更新演算子です。`{ $set: { "price": 19.99, "inStock": true } }` のように複数フィールドを一度に設定できます。
| カテゴリ | フィールド更新 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $set: { <field1>: <value1>, <field2>: <value2>, ... } }
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $set: 複数フィールドを設定
db.products.updateOne(
{ _id: 1 },
{ $set: { price: 19.99, inStock: true } }
)
出力:
// updatedCount: 1 が返る。price は 19.99、inStock は true になる
📌 注意事項
- セマンティクスは 5.0 以前の $set と同じ。配列更新の意味論は MongoDB 7.0 から少し変わった
- 全一致ドキュメントに適用するには updateMany を使う
- $set は既存フィールドを上書きする。マージはしない
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q$set と $inc は一緒に使えますか?
Aはい。$set は固定値を代入し、$inc は算術演算を行います。同じフィールドでなければ 1 つの update に両方書けます。
Q$set と update での単純な代入の違いは?
A$set は指定したフィールドだけを更新し、ドキュメントの残りには触れません。ドキュメント全体を置き換えるには replaceOne を使いますが、こちらは指定していないフィールドがすべて消えます。
Q$set は既存フィールドを上書きしますか?
Aはい。既存フィールドは新しい値で上書きされ、存在しないフィールドは作成されます。冪等で、同じ $set を繰り返しても結果は同じです。