# מערך שיעור: MongoDB — Documents ו-Collections📋 מערך מרצה

משך: 2 שעות אקדמיות (90 דקות).

מטרת השיעור: הסטודנטים יבינו מתי Document Database מתאים יותר מ-SQL, ויבצעו CRUD בסיסי עם MongoDB.Driver.

בסוף השיעור הסטודנטים צריכים: להסביר את ההבדל בין Collection ל-Table, לבצע Insert/Find בסיסיים, ולזהות מתי MongoDB מתאים ומתי SQL עדיף.

דגש קריטי: הימנעו מהצגת MongoDB כ"טוב יותר מ-SQL" — זה כלי שונה לבעיה שונה, לא שדרוג. הדגישו זאת מפורשות.

---

## מהלך השיעור

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 5 דקות | הראו קטלוג מוצרים מגוון — "איך זה בטבלת SQL אחידה?" |
| הבעיה: סכמה קשיחה לא מתאימה | 15 דקות | NULL בעמודות לא-רלוונטיות, או טבלאות נפרדות לכל סוג |
| הרעיון: Document/Collection | 20 דקות | גמישות, דוגמת מוצרים שונים באותה Collection |
| BSON | 10 דקות | הרחבת JSON עם טיפוסים |
| הדגמה חיה: Insert/Find | 25 דקות | MongoDB.Driver, דמיון ל-LINQ |
| דיון: מתי מה | 10 דקות | Polyglot Persistence — לא תחרות |
| תרגול מודרך | 5 דקות | תרגיל 1 |

---

## דגשים להעברת השיעור

- ההנחיה הכי חשובה בשיעור הזה: אל תיצרו רושם ש-NoSQL "מחליף" SQL. הציגו את שניהם ככלים משלימים לבעיות שונות — הדגישו את זה יותר מפעם אחת.
- דוגמת קטלוג המוצרים (חולצה מול מחשב) היא הכי משכנעת — ודאו שסטודנטים מבינים למה זה בעייתי בטבלת SQL אחידה **לפני** שמציגים את הפתרון.
- הדגמה חיה עם MongoDB.Driver בפועל (לא רק שקופיות) חשובה — הריצו Insert+Find על MongoDB אמיתי (לוקאלי או Atlas).

---

## מושגים

**Document** — רשומה גמישה דמוית-JSON.
**Collection** — קבוצת Documents, בלי סכמה אחידה מחייבת.
**BSON** — JSON בינארי עם טיפוסים נוספים.

---

## תרגיל חשיבה

**שאלת פתיחה:** "אתם מתכננים DB לחנות שמוכרת גם ביגוד וגם אלקטרוניקה. בטבלת SQL אחת, כמה עמודות NULL תהיו לכם על כל מוצר בממוצע? מה MongoDB פותר כאן?"

**מהלך:** תנו לסטודנטים לחשב בערך — מוצר ביגוד עם עמודות `CPU`/`RAM` ריקות, מוצר אלקטרוניקה עם `Size`/`Color` ריקות. הובילו לתובנה שזה לא רק "מכוער" — זה גם מבזבז מקום ומקשה על ולידציה הגיונית (מתי `CPU` ריק זה תקין ומתי זו שגיאה?).

**מה המרצה מראה בסוף:** הריצו Insert של שני מוצרים שונים לגמרי במבנה לאותה Collection ב-MongoDB אמיתי, ואז Find שמחזיר את שניהם — הראו שאין שום שגיאה או "התנגשות סכמה", כי היא פשוט לא נאכפת ברמת ה-DB.
