PracticU

עדכון חלקי של מוצר ב-MongoDB

בלי כתוביותעם כתוביות
PracticU › קורס NodeJS › עדכון חלקי של מוצר ב-MongoDB
מילון מושגים:
MongoDB - מסד נתונים מסוג NoSQL שמאחסן נתונים כמסמכים בפורמט דמוי JSON, בלי מבנה טבלאי קשיח.
PUT - שיטת HTTP לשליחת נתונים לשרת כדי ליצור או להחליף משאב קיים במלואו.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.
מאפיין - תכונה שמצמידים לרכיב ומתארת אותו או את התנהגותו, למשל מאפיין של תגית HTML או שדה באובייקט.
קונטרולר - רכיב שמתווך בין הממשק לבין הלוגיקה והנתונים, מקבל בקשות ומחליט כיצד לטפל בהן (למשל בדפוס MVC).
מודל - רכיב שמייצג את הנתונים ואת הלוגיקה העסקית באפליקציה. גם ייצוג מופשט של מערכת או תהליך.
Postman - כלי לבדיקת API: שליחת בקשות HTTP לשרת ובחינת התגובות, נפוץ בפיתוח ובבדיקות.
באג - תקלה או שגיאה בקוד שגורמת לתוכנה להתנהג בניגוד למצופה.

עדכון חלקי של מוצר ב-MongoDB
בעדכון חלקי (PATCH) המשתמש לא חייב לשלוח את כל שדות המוצר. ההרצאה מראה שאפשר להשתמש באותה פונקציית עדכון גם ל-PUT וגם ל-PATCH.
איך זה עובד
1. $set מעדכן רק מה שקיים: אם לאובייקט המוצר אין מאפיין מסוים, הפקודה לא תעדכן אותו. לכן אפשר לאחד את שתי הפונקציות לפונקציה אחת, updateProduct, ולמחוק את הפונקציה של העדכון החלקי.
2. מעדכנים את הקונטרולר: גם ב-PUT וגם ב-PATCH קוראים ל-updateProduct.
3. מונעים ערכי undefined: מחלקת המודל תמיד יוצרת את המאפיינים, גם בלי ערך, ו-MongoDB היה שומר undefined כערך. לכן מוסיפים בדיקה: רק אם _id, name, price, stock או categoryId שונים מ-undefined, מציבים אותם באובייקט העדכון.
4. בודקים ב-Postman: משכפלים את בקשת ה-PUT, משנים ל-PATCH ושולחים בלי השם, ורואים שהמחיר והמלאי השתנו ב-Robo 3T.
באג שנמצא
כששלחו בלי categoryId, הוא עדיין הופיע בתשובה. הסיבה הייתה שההמרה ל-ObjectId בוצעה תמיד. הפתרון הוא להריץ אותה רק כש-categoryId קיים.
המרצה מדגיש כאן חשיבות של סדרת בדיקות, למשל שליחה עם categoryId אחר לגמרי.
כך אפשר לעדכן מוצר באופן חלקי, ונשארת רק המחיקה.
השיעור הבא בקורס: מחיקה של מוצר ב-MongoDB

פרקי ההרצאה: עדכון חלקי של מוצר ב-MongoDB

  1. 00:00

    התכונה של set בעדכון חלקי

  2. 00:44

    איחוד הפונקציה ל-Update Product

  3. 01:38

    טריק למניעת ערכי undefined

  4. 03:12

    התאמה לוולידציה של Patch

תמלול ההרצאה: עדכון חלקי של מוצר ב-MongoDB

הטקסט המלא של הדקות הראשונות בהרצאה «עדכון חלקי של מוצר ב-MongoDB» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:04

    אנחנו רוצים לעדכן עבור פאץ', כלומר לעדכן מוצר שלא בטוח שהיוזר הביא לי הכל לגביו. אז מה שאנחנו צריכים להבין בשביל להצליח לעשות את זה, זה שהקונספט הזה של סט מעדכן רק את מה שיש במוצר עצמו.

  2. 00:26

    זאת אומרת שאם לפרודקט אין מאפיין מסוים, אז סט לא תעדכן אותו. בגלל הנקודה הזאת, בגלל התכונה הזאת, אנחנו יכולים לקחת את הפונקציה הזאת שבנינו ולהשתמש איתה גם עבור פאץ'.

  3. 00:42

    זאת אומרת שבואו נשנה לה את השם במקום update full product, נשנה את זה ל-update product, זה אומר גם full וגם לא full. ואז אנחנו רוצים כמובן ללכת פה למטה ולהגיד שאין לנו update full product, יש לנו רק update product.

  4. 01:02

    אין לנו partial, בואו ניפטר ממנה גם מפה גם מפה, כל הפונקציה הזאת לא קיימת לנו, אנחנו לא צריכים אותה. כעת אנחנו יכולים לגשת ל-products-controller ולשנות גם ב-put במקום update full product לקרוא ל-update product וב-patch במקום update partial product לקרוא ל-update product.

  5. 01:38

    יש רק בעיה אחת אם לא שולחים לי ערכים נניח לניים לא שלחו לי איזה שהוא ערך עדיין אנחנו שולחים ניים שהוא ריק לתוך פרודקט זאת אומרת שהולך להיות כאן איזה שהוא ניים כי לפרודקט עצמו יש ניים אם אנחנו הולכים למודל שלנו אנחנו רואים שיש לו ניים ברגע שיש לנו דיס נקודה אז יש לנו name אז אנחנו יכולים לעשות פה איזשהו טריק קטן ולהגיד כזה

  6. 02:15

    דבר רק אם הביאו לי נניח underline ID אם הדבר הזה שונה מ-undefined אז תכניס את ה-underline ID וככה אנחנו יכולים לעשות לכל אחד מהחבר'ה האלה רק אם הביאו לי כאן את ה-name תן לי name price תן לי price סטוק תן לי סטוק וקטגורי ID תן לי קטגורי ID. זאת אומרת שאם מישהו שלח לי כאן undefined אל תכניס לי את

  7. 02:54

    האובייקט הזה כי אם כן יכניסו לי name אפילו שזה נניח שהביאו לי undefined ויכניסו פה undefined מבחינת המונגו db יש כאן איזשהו ערך והוא undefined אנחנו לא רוצים שבכלל יהיה לנו ערך במידה ולא יכניסו value אוקיי.

  8. 03:17

    אז זה בייסיקלי מתאים לנו לפאצ' ובפאצ' אם אנחנו מסתכלים על הוולידציה אנחנו רואים שאף אחד מהם לא required אז זה בסדר הוולידציה לא תיפול לנו. אז בואו ננסה עכשיו להריץ ולראות האם כל הסיפור הזה תומך לנו בפאצ'.

  9. 03:36

    נוד אפ גו אין איזה רץ לו בואו ניגש ואנחנו רוצים ללכת לפוט ולשכפל אותו דופליקייט ואז

לקורס המלא: קורס NodeJS אונליין בעברית

ההרצאה הקודמת: עדכון מלא של מוצר ב-MongoDB

ההרצאה הבאה: מחיקה של מוצר ב-MongoDB

הרצאות קשורות מקורסים אחרים

  • עדכון מוצר בריאקט
  • עדכון נתונים ב-MongoDB
  • עדכון חלקי במסד נתונים - דוט נט NET Core.
  • עדכון Documents - ממסד הנתונים - MongoDB - Entity Framework

קורסים נוספים במסלול

  • קורס יסודות HTML - בניית אתר אינטרנט פשוט
  • קורס CSS 3 - בדגש על Flex & Grid
  • קורס Javascript כולל JQuery
  • קורס ג'אווה סקריפט מעשי - JavaScript
  • קורס TypeScript
  • קורס ריאקט - React