PracticU

עדכון מלא של מוצר ב-MongoDB

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

עדכון מלא של מוצר ב-MongoDB
כך מעדכנים מוצר שלם ב-MongoDB, כולל פתרון לשגיאה שנוצרת כשמנסים לעדכן את ה-_id.
השלבים העיקריים
1. מכינים את הפונקציה: updateFullProductAsync מחזירה Promise, וממירה את categoryId שמגיע כמחרוזת ל-ObjectId.
2. משתמשים ב-updateOne: המסנן הוא _id שעבר המרה עם mongodb.ObjectID, ובאובייקט העדכון משתמשים בפקודת $set עם המוצר כולו. פקודות שמתחילות ב-$ שייכות ל-MongoDB Query Language.
3. מטפלים במוצר שלא נמצא: ב-callback בודקים את info.result.n. אם הוא שונה מאפס מחזירים את המוצר, ואחרת null, וכך הקונטרולר מחזיר 404.
4. מוסיפים categoryId לקונטרולר: בבדיקה התברר שב-PUT לא הועבר request.body.categoryId, ולכן חזרה השגיאה category id is required. תוקן ב-PUT ובאותה צורה גם ב-PATCH.
5. פותרים את שגיאת ה-_id: MongoDB דוחה עדכון שמשנה את השדה הקבוע _id. לכן שומרים את product._id במשתנה, מוחקים אותו מהאובייקט לפני העדכון ומחזירים אותו לפני שמחזירים את התוצאה.
בדיקה
ב-Postman שולחים PUT עם הכתובת של המוצר האחרון (Apple), ובגוף JSON חדש, למשל green apple, אחרי שמסירים ממנו את ה-_id. ב-Robo 3T רואים את השם החדש.
בהרצאה הבאה יוצג עדכון חלקי.
השיעור הבא בקורס: עדכון חלקי של מוצר ב-MongoDB

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

  1. 00:00

    פתיחת הפונקציה Update Full Product

  2. 00:41

    שימוש ב-updateOne במקום insertOne

  3. 01:37

    פקודת set בשפת MongoDB Query Language

  4. 02:34

    בדיקת מספר הדוקומנטים שהושפעו

  5. 03:50

    בדיקת העדכון דרך Postman

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

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

  1. 00:03

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

  2. 00:23

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

  3. 00:42

    אם שולחים לי איזשהו קטגורי ID אחר כסטרינג, אז אני ממיר אותו ל-object ID, מחזיר פרומיס ואנחנו ניגשים לקולקשן של כל המוצרים. במקום insert one אנחנו משנים את זה ל-update one.

  4. 01:05

    ואז אנחנו אומרים לו, תשמע, מה אנחנו בעצם מחפשים? אנחנו קודם כל רוצים לחפש איזשהו מוצר לעדכון. אז המוצר שאנחנו רוצים לחפש לעדכון, ה-ID שלו, mongo.db.object.id ואנחנו רוצים לתת לו את ה-ID של המוצר, product.underline.id ואז אנחנו רוצים לומר לו לשים את המוצר הזה כולו

  5. 01:40

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

  6. 01:59

    למונגו דיבי יש סדרה של פקודות שמתחילות בדולר והן שייכות לשפה שנקראת מונגו דיבי query language והשפה הזאת בעצם אומרת למונגו דיבי לבצע כל מיני דברים כי אין לנו כאן שפת SQL. אז לדוגמה אם אנחנו רוצים לשים את כל האובייקט as is, אז אנחנו משתמשים בפקודה שנקראת דולר סט ונותנים

  7. 02:26

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

  8. 02:57

    אז אנחנו יכולים עכשיו לדווח את הדבר הבא info.result.n אם הדבר הזה גדול מאפס שונה מאפס אנחנו מדווחים את המוצר אחרת null. וזה פותר לנו את הבעיה של ה-404, אם מישהו מנסה לעדכן איזשהו מוצר שלא קיים, אולי לפני זה הוא נמחק או משהו כזה.

  9. 03:25

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

  10. 03:39

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

  11. 03:53

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

  12. 04:22

    בואו נגדיר אותו כ-JSON, האמת בואו רגע ניגש לפה נביא את כל המוצרים ניגש למוצר האחרון הוא היה אפל וניקח את ה-ID הספציפי שלו. ננסה לעדכן ספציפית את אפל עכשיו ניגש לפה נעתיק את כל זה נדביק נוריד את ה-ID מה-Body

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

ההרצאה הקודמת: הוספת מוצר חדש ל-MongoDB

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

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

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

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

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