Firebase & Supabase • المستوى الأول • الدرس 2
العودة لفهرس المستوىإنشاء وقراءة مستندات Firestore (addDoc, setDoc & getDocs)
أهداف الدرس العلمية
- استخدام
addDocلإنشاء مستندات فريدة أوsetDocلتخصيص الـ Key. - فهم بنية قواعد Firestore القائمة على المجموعات والمستندات (Collections & Documents).
- استخدام
{ merge: true }لتحديث المستندات دون فقدان الحقول القديمة. - القراءة بـ
getDoc(مستند واحد) وgetDocs(مجموعة كاملة).
1. التعامل مع Cloud Firestore
تتميز Cloud Firestore بالسرعة والقابلية للتوسع السحابي، حيث يمكنك إنشاء مستندات مرنة وتعيين معرفات مخصصة تطابق الـ UID الخاص بكل مستخدم موثّق.
javascript
// بنية Firestore
// Collection (مجموعة) → Document (مستند) → Fields (حقول)
users/ ← Collection
├── user-101 ← Document (معرف مخصص)
│ ├── name: "سارة"
│ ├── age: 28
│ └── email: "[email protected]"
│
└── aB3xY9kQ2p ← Document (معرف تلقائي)
├── name: "جمال"
└── age: 302. المقارنة: addDoc vs setDoc
addDoc
يولّد معرفاً تلقائياً ويضيف مستنداً جديداً.
await addDoc(collection(db, 'users'), data)
setDoc
يعيّن معرفاً مخصصاً (يستبدل أو يُدمج).
await setDoc(doc(db, 'users', id), data, { merge: true })3. عمليات CRUD الكاملة
| العملية | الدالة | الاستخدام |
|---|---|---|
| Create | addDoc / setDoc | إضافة مستند جديد |
| Read | getDoc / getDocs | قراءة مستند أو أكثر |
| Update | updateDoc / setDoc(merge) | تعديل حقول |
| Delete | deleteDoc | حذف مستند |
التطبيق العملي المباشر
تحدي الدرس الثاني: بناء نظام CRUD كامل
قم بالتعديل على الكود بداخل المحرر أدناه لتطبيق المتطلبات التالية:
- أضف
getDocوgetDocsوupdateDocوdeleteDocإلى قائمة imports. - أضف
{ merge: true }للدالةsetUserWithCustomIdلتجنب مسح الحقول القديمة. - أنشئ دالة
getUserById(userId)تستخدمgetDocوتتحقق منexists(). - أنشئ دالة
getAllUsers()تستخدمgetDocsوترجع مصفوفة من المستندات. - أنشئ دالة
updateUserAge(userId, newAge)تستخدمupdateDoc. - أنشئ دالة
deleteUser(userId)تستخدمdeleteDoc.
⏳ جارٍ تحميل المحرر التفاعلي...