NahdaAIنهضة
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: 30

2. المقارنة: addDoc vs setDoc

addDoc

يولّد معرفاً تلقائياً ويضيف مستنداً جديداً.

await addDoc(collection(db, 'users'), data)
setDoc

يعيّن معرفاً مخصصاً (يستبدل أو يُدمج).

await setDoc(doc(db, 'users', id), data, { merge: true })

3. عمليات CRUD الكاملة

العمليةالدالةالاستخدام
CreateaddDoc / setDocإضافة مستند جديد
ReadgetDoc / getDocsقراءة مستند أو أكثر
UpdateupdateDoc / setDoc(merge)تعديل حقول
DeletedeleteDocحذف مستند
التطبيق العملي المباشر

تحدي الدرس الثاني: بناء نظام CRUD كامل

قم بالتعديل على الكود بداخل المحرر أدناه لتطبيق المتطلبات التالية:

  1. أضف getDoc و getDocs و updateDoc و deleteDoc إلى قائمة imports.
  2. أضف { merge: true } للدالة setUserWithCustomId لتجنب مسح الحقول القديمة.
  3. أنشئ دالة getUserById(userId) تستخدم getDoc وتتحقق من exists().
  4. أنشئ دالة getAllUsers() تستخدم getDocs وترجع مصفوفة من المستندات.
  5. أنشئ دالة updateUserAge(userId, newAge) تستخدم updateDoc.
  6. أنشئ دالة deleteUser(userId) تستخدم deleteDoc.
⏳ جارٍ تحميل المحرر التفاعلي...