$setOnInsert (挿入時のみ設定)

最終更新:2026-10-09

$setOnInsert (挿入時のみ設定)

$setOnInsert は、upsert が新しいドキュメントを挿入した場合にのみフィールド値を設定し、既存ドキュメントに一致した場合は無視されます。`{ $setOnInsert: { createdAt: new Date() } }` のように使います。upsert: true と組み合わせると、作成タイムスタンプの記録やデフォルト値の初期化ができます — 作成時のみ設定し、更新時は変更しないセマンティクスです。

カテゴリフィールド更新
MongoDB バージョン1.0+
例の言語mongosh(シェル)

📝 構文

{ $setOnInsert: { <field>: <value> } }

⚙️ パラメータ

フィールド挿入時のみ設定されるフィールド。
値初期値(例: 作成時刻)。

戻り値:更新結果

▶ 例

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

// $setOnInsert: createdAt は挿入時のみ設定される
db.users.updateOne(
  { email: 'alice@example.com' },
  {
    $set: { name: 'Alice' },
    $setOnInsert: { createdAt: new Date() }
  },
  { upsert: true }
)

出力:

// createdAt は最初の挿入時に記録され、その後の更新では変更されない

📌 注意事項

📚 関連チュートリアル

❓ よくある質問

Q$setOnInsert はいつ有効になりますか?
Aupsert が実際に挿入した場合のみです。既存ドキュメントの更新時は無視されます。
Q$setOnInsert と $set は併用できますか?
Aはい。$set は毎回適用され、$setOnInsert は挿入時のみ適用されます。
Qupsert: true は必須ですか?
Aはい。なければ純粋な更新では発動しません。
Web-Tutorial.com

Web-Tutorial 技術チーム

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

100%