
_id.updateFullProductAsync מחזירה Promise, וממירה את categoryId שמגיע כמחרוזת ל-ObjectId.updateOne: המסנן הוא _id שעבר המרה עם mongodb.ObjectID, ובאובייקט העדכון משתמשים בפקודת $set עם המוצר כולו. פקודות שמתחילות ב-$ שייכות ל-MongoDB Query Language.info.result.n. אם הוא שונה מאפס מחזירים את המוצר, ואחרת null, וכך הקונטרולר מחזיר 404.request.body.categoryId, ולכן חזרה השגיאה category id is required. תוקן ב-PUT ובאותה צורה גם ב-PATCH._id: MongoDB דוחה עדכון שמשנה את השדה הקבוע _id. לכן שומרים את product._id במשתנה, מוחקים אותו מהאובייקט לפני העדכון ומחזירים אותו לפני שמחזירים את התוצאה._id. ב-Robo 3T רואים את השם החדש.הטקסט המלא של הדקות הראשונות בהרצאה «עדכון מלא של מוצר ב-MongoDB» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו עוברים לעדכון מוצר מלא. יש לנו כאן את הפונקציה UpdateFullProductAsync. בואו רגע נוריד אותה. בואו נוריד את המילה אסינק מההתחלה וניפטר מתוכן שלה.
ומה שאנחנו רוצים זה להחזיר, או סליחה, לעדכן מוצר מלא. אז בואו ניקח את כל הקטע קוד הזה, נדביק. שוב, יש לנו שינוי של הקטגורי ID.
אם שולחים לי איזשהו קטגורי ID אחר כסטרינג, אז אני ממיר אותו ל-object ID, מחזיר פרומיס ואנחנו ניגשים לקולקשן של כל המוצרים. במקום insert one אנחנו משנים את זה ל-update one.
ואז אנחנו אומרים לו, תשמע, מה אנחנו בעצם מחפשים? אנחנו קודם כל רוצים לחפש איזשהו מוצר לעדכון. אז המוצר שאנחנו רוצים לחפש לעדכון, ה-ID שלו, mongo.db.object.id ואנחנו רוצים לתת לו את ה-ID של המוצר, product.underline.id ואז אנחנו רוצים לומר לו לשים את המוצר הזה כולו
במקום המוצר הקיים. זה מתבצע באופן הבא, יש לנו אובייקט שאנחנו צריכים לשלוח לכאן שבו אנחנו פעם ראשונה רואים פקודה שמתחילה בדולר ושייכת למונגו דיבי.
למונגו דיבי יש סדרה של פקודות שמתחילות בדולר והן שייכות לשפה שנקראת מונגו דיבי query language והשפה הזאת בעצם אומרת למונגו דיבי לבצע כל מיני דברים כי אין לנו כאן שפת SQL. אז לדוגמה אם אנחנו רוצים לשים את כל האובייקט as is, אז אנחנו משתמשים בפקודה שנקראת דולר סט ונותנים
את כל האובייקט עצמו. מקבלים בחזרה אירור או אינפו, אם יש שגיאה מעלים אותה, אם אין שגיאה אנחנו מדווחים את המוצר. יכול להיות מצב שהמוצר לא נמצא אם הוא לא נמצא אנחנו מקודם ראינו שהאינפו מכיל ריזולט והריזולט מכיל את מספר הדוקיומנטס שהושפעו.
אז אנחנו יכולים עכשיו לדווח את הדבר הבא info.result.n אם הדבר הזה גדול מאפס שונה מאפס אנחנו מדווחים את המוצר אחרת null. וזה פותר לנו את הבעיה של ה-404, אם מישהו מנסה לעדכן איזשהו מוצר שלא קיים, אולי לפני זה הוא נמחק או משהו כזה.
עכשיו קיימת פה עוד בעיה אחת שתגרום לקריסה חריגה בייסיקלי שאנחנו נצטרך לטפל בה, זאת אומרת שהתוכנית הזאת, הפונקציות עדיין לא תרוץ, אבל בואו נראה רגע מה הוא אומר לנו, אוקיי?
אני חוזר רגע לכאן, אני הולך ל-put, אני רואה שיש לי פה את כל הפרמטרים של המוצר. מנסה לעשות ולידציה עם ג'וי, אם כן, מנסה להכניס אותו לדאטה-בייס.
בואו נריץ את זה רגע. ניגש לפוסטמן, את זה אפשר לסגור, ואנחנו רוצים לגשת לכאן, לקחת איזשהו מוצר, הנה הכתובת, לשים פאץ', לא פאץ', סליחה, פוט, ולתת לו ערכים בבאדי.
בואו נגדיר אותו כ-JSON, האמת בואו רגע ניגש לפה נביא את כל המוצרים ניגש למוצר האחרון הוא היה אפל וניקח את ה-ID הספציפי שלו. ננסה לעדכן ספציפית את אפל עכשיו ניגש לפה נעתיק את כל זה נדביק נוריד את ה-ID מה-Body