PracticU

עדכון נתונים ב-MongoDB

בלי כתוביותעם כתוביות
PracticU › קורס NoSQL - MongoDB › עדכון נתונים ב-MongoDB
מילון מושגים:
MongoDB - מסד נתונים מסוג NoSQL שמאחסן נתונים כמסמכים בפורמט דמוי JSON, בלי מבנה טבלאי קשיח.
רשומה - שורה בטבלת מסד נתונים שמרכזת את כל השדות של פריט אחד, למשל כל הפרטים של לקוח יחיד.
הקסדצימלי - שיטת ספירה בבסיס 16, המשתמשת בספרות 0-9 ובאותיות A-F, ונפוצה לייצוג ערכים בינאריים בקצרה.
מערך - מבנה נתונים שמאחסן אוסף ערכים מאותו סוג ברצף, שאפשר לגשת אליהם לפי מספר מיקום (אינדקס).
שרת - מחשב או תוכנה שמספקים שירות למחשבים אחרים (לקוחות) ברשת, למשל אחסון קבצים, אתר אינטרנט או מסד נתונים, ומגיבים לבקשות שלהם.
תהליך - מופע של תוכנה שרצה בזיכרון, עם הקוד, הנתונים והמשאבים שהוקצו לה על ידי מערכת ההפעלה.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.

עדכון נתונים ב-MongoDB
ההרצאה עוברת על פקודות הבסיס של MongoDB לשליפה, עדכון ומחיקה של נתונים, ומסבירה את Write Concern, שמגדיר כמה אישורים צריך לקבל לפני שממשיכים.
איך עובדות הפקודות
1. שליפה עם find: כותבים db, אחר כך את שם ה-collection, ובתוך find שני חלקים. הראשון הוא הקריטריון, למשל גיל גדול מ-18 עם $gt. השני הוא ה-projection, שמגדיר אילו שדות להציג: 1 ליד שם שדה אומר להציג אותו. את מספר השורות מגבילים ב-limit, וזה המקביל ל-Top.
2. אופרטורי השוואה: כותבים $eq, $gt, $gte, $lt, $lte ו-$ne במקום סימנים כמו קטן וגדול. יש גם $cmp, שמחזיר 0 כששני האיברים שווים, 1 כשהראשון גדול ו--1 כשהוא קטן.
3. עדכון: מציינים קריטריון ואחריו מה לעדכן. $set קובע ערך חדש לשדה, למשל סטטוס rejected לכל מי שגילו קטן מ-18. יש עדכון של מסמך אחד, של כמה מסמכים, ואפשרות upsert: אם אין מסמך מתאים, נוצר חדש.
4. החלפה: replace מקבל פילטר ומחליף את המסמך כולו במה שנשלח בפקודה.
5. מחיקה: delete one מוחק רשומה אחת, delete many מוחק את כל מי שעונה על הקריטריון, ו-remove בודק קריטריון על כל מסמך ומוציא אותו מה-collection.
6. כללי _id: _id הוא השדה היחיד שחובה. הוא ייחודי ב-collection, וגודל מסמך מגיע לכל היותר ל-16 מגה. הערך יכול להיות מספר, הקסדצימלי או תאריך, אבל לא מערך.
Write Concern
בכל פקודה שמשנה נתונים (הוספה, עדכון או מחיקה) אפשר להגדיר את רמת האישור (acknowledge) שמחכים לו.
1. w: 1: ברירת המחדל. מחכים לאישור מה-Primary בלבד, גם אם הנתונים עוד לא נכתבו לכל ה-replica set.
2. w: 0: לא מחכים לשום אישור, לביצועים גבוהים. מניחים שהפקודה תיכנס ותתפשט.
3. מספר גבוה יותר: המספר קובע מכמה שרתים מחכים לאישור. עם Primary ושלושה Secondary, w: 4 אומר שמחכים לכולם. זה איטי משמעותית.
4. majority: מחכים לאישור מרוב השרתים. הוא איטי יותר, אבל נותן את מירב היציבות, האמינות והזמינות. בדוגמה של ארבעה שרתים w: 4 מתאים בערך ל-majority, אבל כשמוסיפים עוד שרתים majority מתאים את עצמו ו-4 נשאר קבוע.
5. wtimeout: זמן מקסימלי במילישניות שמחכים לאישור. הוא מונע מתהליך תקוע לחסום את שאר התהליכים בשרת, ובסיומו התהליך נכשל או מדווח שלא התקבל אישור, ולא ממשיך להמתין.
אחרי ההרצאה אפשר לכתוב שאילתות שליפה, עדכון ומחיקה, ולבחור רמת Write Concern לפי הצורך בין מהירות לבין אמינות.
השיעור הבא בקורס: פקודות ב-MongoDB

פרקי ההרצאה: עדכון נתונים ב-MongoDB

  1. 00:00

    פקודת Find לשליפת נתונים

  2. 00:56

    אופרטורי השוואה במדריך של MongoDB

  3. 01:51

    האופרטור $cmp להשוואת ערכים

  4. 02:29

    Projection ו-Limit בשליפה

  5. 03:24

    פקודת Update ותנאי הסינון

  6. 04:18

    Upsert עדכון או הכנסה

  7. 04:56

    UpdateOne, UpdateMany ו-ReplaceOne

  8. 05:54

    עדכון שדות עם $set

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

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

  1. 00:02

    נעבור כעת hands-on על פקודות פרוד, פקודות לשליפה, לעדכון, למחיקה ולהוספה של נתונים. פקודה ראשונה, פקודת Fetch, פקודה שבה אנחנו שולפים נתונים, הפקודה עצמה נקראת Find, כפי שניתן לראות.

  2. 00:17

    כדי להתייחס לפקודה עצמה, אנחנו צריכים לרשום קידומת של DB, כלומר בדאטאבייס הנוכחי שבו אנחנו נמצאים, תחת ה-Collection של Users, תחת Collection של Users, אנחנו מחפשים את הדוקיומנטים הבאים.

  3. 00:35

    מה הם הדוקיומנטים שאנחנו מחפשים? שימו לב, יש לנו שתי פסקאות שנכנסות בתוך פקודה של פיינד. פסקה ראשונה זה הקריטריה, זה ה-workloads, זה הפקודה שבה אנחנו מציינים אייג' גדול מ-18.

  4. 00:52

    כל פקודה שרשום כאן דולר GT, זאת אומרת שזה greater than 18. ניתן לראות גם EQ, שזה equal ואת כל הפקודות הללו ניתן לראות בתוך ה-help של מונגו דיבי.

  5. 01:09

    נבחן עוד אופרטורים נוספים שקיימים כמו gt ו-gte, נעבור רגע לתוך ה-help שלנו, בתוך המניואל, ושימו לב אנחנו יכולים לראות כאן אופרטורים נוספים.

  6. 01:20

    דולר eq, משמעות הדבר שזה equal, זה ממש כאילו רשמנו שווה, מאחר ואנחנו בתוך שפת ג'ייסון אנחנו לא רושמים סימן קטן, סימן גדול או שווה, אנחנו משתמשים או באופרטור eq-equal gt-greater-than greater-than-or-equal איבר מסוים שווה או גדול מאיבר אחר קטן מ-little-than-or-equal

  7. 01:46

    ו-ne-not-equal כלומר אוסף של אופרטורים על מנת לבצע השוואה הם כולם נמצאים כאן בתוך המנואל של מונגו ובתוכם אנחנו יכולים להשוות בין שני איברים שונים.

  8. 02:02

    שימו לב שיש לנו כאן את האופרטור cmp, שהוא דומה לפונקציה שנמצאת בשפת c שנקראת str compare, שמה שהוא מחזיר לנו זה 0 במידה ושני האיברים שווים, equal, אחד אם הראשון הוא גדול מהשני ומינוס אחד אם הראשון הוא קטן מהשני וזאת אומרת השני גדול מן הראשון, אנחנו מקבלים מינוס אחד אז דולר cnp

  9. 02:29

    compare מחזיר לנו כל אחת מהאפשרויות הללו. נחזור כאן לתוך המצגת שלנו. בדוגמה שלנו אנחנו מבקשים את כל אלו שהגיל שלהם גדול מ-18. זה ה-query קריטריה.

  10. 02:45

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

  11. 03:00

    כל עמודה שאני מציין לה 1, משמעות הדבר שאנחנו רוצים אותה name.1, address.1, זאת אומרת שאנחנו רוצים לקבל שתי עמודות בלבד, וכמה שורות אנחנו יכולים לחתום אותן, את מספר השורות, על ידי limit 5, זאת אומרת שלווילי מקסימום 5 שורות.

  12. 03:20

    הפקודה כאן בעצם המקבילה למצב שבו אנחנו שולפים where h גדול מ-18, Select Name, Seek Address, Top 5 על מנת לקבל רק את החמישה הראשונים בלבד.

  13. 03:35

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

  14. 03:48

    ה-Collection, ובתוך ה-Collection עכשיו אנחנו מציינים מה אנחנו רוצים לעדכן. הדוקומנטים שממלאים אחר הקווירי, שממלאים אחר הדרישות בתנאי הבוליאני שיש כאן בתוך הקווירי.

  15. 04:02

    אותם אנחנו רוצים לעדכן. מה אנחנו רוצים לעדכן? זה מה שיש לנו כאן בתוך הפסוקית של Update. וכאן ב-Update הזה, בניגוד למה שאנחנו מכירים מעולם הרלציוני של MySQL או SQL או רק עם שפת SQL, כאן יש לנו אפשרות לעדכן one, many או absurd.

  16. 04:23

    כשמשמעות הדבר שאם הביטוי עצמו לא קיים אנחנו מכניסים אותו. כלומר מדובר כאן על פקודה שהיא Update או Insert. אם אנחנו מוצאים את הרשומה אנחנו מעדכנים אותה ואז זה קורה Update ואם לא מצאנו רשומה כזאת אנחנו מייצרים רשומה כזאת ומכניסים אותה בתוך ה-Documents, מכניסים אותה בתוך ה-Collection.

  17. 04:45

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

  18. 05:03

    כאשר אנחנו רוצים לעדכן כמה רשומות זה ה-Update Meily. אלו פקודות שאנחנו יכולים להריץ אותן דרך השל וה-Replace 1. Replace 1 זוהי פקודה שמגיעה יחד עם פילטר כלומר אנחנו צריכים איזושהי קריטריה על מנת לחפש את הרשומות עצמם, ואותם אנחנו מחליפים, כלומר מחליפים את כל

  19. 05:26

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

  20. 05:49

    בואו נראה עוד פקודות. אז עבדת מני, הנה הרי לפנינו דוגמה, אם אני רוצה לבדוק שוב פעם, Age קטן מ-18, זה הקריטריה, זה הפילטר, זה ה-Workloads שלי שבו אני בודק.

  21. 06:02

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

  22. 06:21

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

  23. 06:35

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

  24. 07:05

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

לקורס המלא: קורס MongoDB אונליין

ההרצאה הקודמת: התקנה של MongoDB דרך CMD

ההרצאה הבאה: פקודות ב-MongoDB

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

  • עדכון מלא של מוצר ב-MongoDB
  • מסד נתונים NoSQL - MongoDB
  • עדכון של Kali
  • עדכון חלקי במסד נתונים - דוט נט NET Core.

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

  • קורס DBA אפליקטיבי - שפת SQL למתחילים
  • קורס SSIS
  • קורס BI - ניתוח מסדי נתונים - Qlik Sense
  • קורס Power BI