
categoryId. בהרצאה מביאים את המוצרים וכל מוצר מגיע יחד עם אובייקט הקטגוריה שלו, כלומר סוג של join.categoryId וגם את שם הקטגוריה והתיאור שלה.getProductsIncludingCategory, בשם ביחיד, כי לכל מוצר קטגוריה אחת. מתחילים מהקוד שמחזיר את כל המוצרים.aggregate במקום find: מעבירים לו מערך של אובייקטים שמתארים את השלבים.$lookup: מגדירים from: "categories" (הטבלה השנייה), localField: "categoryId" (השדה במוצרים), foreignField: "_id" (השדה בקטגוריות) ו-as: "category" (שם האובייקט החדש).join/products-including-category, ובדיקה ב-Postman.$unwind: התוצאה הראשונית מכילה את הקטגוריה כמערך עם איבר אחד. הוספת { $unwind: "$category" } מפרקת את המערך והופכת אותו לאובייקט בודד.aggregate מחליף את ה-find, ולכן עדיין צריך toArray בסוף.$unwind הקטגוריה מגיעה כמערך, גם כשיש בו איבר אחד.הטקסט המלא של הדקות הראשונות בהרצאה «שליפת מוצר יחד עם הקטגוריה שלו - MongoDB Join» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
כאשר אנחנו בנינו דאטאבייס במונגו DB והאמת גם זה היה במיי SQL וכאשר אנחנו השתמשנו בנורפרינד אנחנו ראינו שיש לנו פה את הקונספט הזה של הריליישן שיפ שהוא קונספט לוגי במונגו DB יותר מאשר פיזי.
במיי SQL ובדאטאבייס רלציוני זה קשר פיזי שממש יש בדאטאבייס ובודק לנו את המידע. כאן אנחנו רואים שיש לנו קטגורי ID לכל מוצר שמתאר איזו קטגוריה המוצר הזה שייך אליה.
האם זה משקאות? האם זה תבלינים? האם זה ממתקים או קינוחים? זה בעצם רטבים וקינוחים, מוצרי חלב וכדומה. אז יש לנו את הקונספט הזה ואנחנו רוצים להשתמש בו בכדי להחזיר בעצם שני דברים.
אם אני מביא מוצרים אני רוצה לעשות סוג של join כזה ולכל מוצר להביא את הקטגוריה אני לא רוצה להחזיר את זה תמיד בהכרח ללקוח הלקוח לא מעניין אותו מהcategory ID של המוצר יכול להיות שכן אבל הוא בטח ירצה גם לראות דברים כמו השם של הקטגוריה והDescription זאת אומרת שבמוצרים אנחנו רוצים להביא את המוצר עם כל הפרמטרים
שלו ובנוסף להביא גם את האובייקט של הקטגוריה שמתאים אליו, זה דבר ראשון. דבר שני, אם אנחנו מביאים את הקטגוריות, אולי אנחנו רוצים לכל קטגוריה להראות אילו מוצרים יש לה.
אז זה בעצם שני דברים שונים שאנחנו יכולים לעשות, בואו נתחיל עם הדבר הראשון. אז אנחנו עושים את זה ב-Business Logic שלנו וב-Business Logic אנחנו רוצים לבנות Function, קט פרודקטס אינקלודינג קטגורי כי למוצר יש קטגוריה אחת והגדרה שיש לנו בדאטאבייס הסינק אין לנו מה לקבל לתוך הפונקציה ואנחנו רוצים לייצר כאן בדיוק את הפרומיס הזה בואו ניקח אותו מפה הוא מביא
לנו את כל המוצרים הופך את זה למערך ומחזיר את כל המוצרים אז בואו נדביק ואיך אנחנו מציינים לקולקשן הזה לבצע איזשהו סוג של join עם כל הקטגוריות. אז כאן אנחנו במקום find רושמים את פונקציית aggregate, מעין קיבוץ כזה.
ואנחנו נותנים לה מערך, היא מקבלת מאיתנו מערך של נתונים, והמערך הזה מקבל אובייקטים בכדי להראות את הקשרים השונים שקיימים. האובייקט הראשון, בעצם יש לנו כאן, כן, יש לנו פה אובייקט ראשון שאומר כזה דבר.
ב-query language יש לנו lookup. lookup זה אובייקט שמתאר מה בעצם אנחנו רוצים לבחור. אז אנחנו אומרים כזה דבר.
אנחנו קולקשן שנקרא product. זה הקולקשן שהוא הנוכחי שלנו. אנחנו רוצים from collection שנקרא categories, לבחור לוקל פילד, הלוקל פילד שלנו זה קטגורי איי-די, כלומר לוקל פילד של פרודקטס והפורן פילד והפורן פילד שנמצא בתוך קטגוריז אנחנו רוצים שהוא יהיה underline איי-די ואנחנו רוצים לקרוא
לאובייקט החדש שהולך להיווצר פה קטגורי אם היינו מסדרים את זה אולי ככה והיה אולי קצת יותר ברור. לוקל פילד שלנו, שימו לב שאנחנו פרודקטס, אז הלוקל פילד שלנו בריליישן שקיים בפרודקטס זה קטגורי ID, כי אני פרודקטס.
אם אני הולך לפורנקי, לטבלה השנייה שאני מתייחס אליה, שם זה נקרא underline ID, אני פשוט