$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 عند أول إدراج؛ التحديثات اللاحقة تتركه دون مساس
📌 ملاحظات
- ينطبق فقط عندما يُدرج upsert
- استخدمه مع $set ليقوم كلٌ من التهيئة والتحديث بدوره
- رائع للحقول غير القابلة للتغيير مثل createdAt
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qمتى يسري $setOnInsert؟
Aفقط عندما يُدرج upsert فعلًا؛ يُتجاهل عند تحديث مستند موجود.
Qهل يمكن استخدام $setOnInsert و $set معًا؟
Aنعم؛ يسري $set في كل مرة، بينما يسري $setOnInsert عند الإدراج فقط.
Qهل يجب ضبط upsert: true؟
Aنعم، وإلا فلن يُفعَّل أبدًا في سيناريوهات التحديث الخالصة.