
find: כותבים db, אחר כך את שם ה-collection, ובתוך find שני חלקים. הראשון הוא הקריטריון, למשל גיל גדול מ-18 עם $gt. השני הוא ה-projection, שמגדיר אילו שדות להציג: 1 ליד שם שדה אומר להציג אותו. את מספר השורות מגבילים ב-limit, וזה המקביל ל-Top.$eq, $gt, $gte, $lt, $lte ו-$ne במקום סימנים כמו קטן וגדול. יש גם $cmp, שמחזיר 0 כששני האיברים שווים, 1 כשהראשון גדול ו--1 כשהוא קטן.$set קובע ערך חדש לשדה, למשל סטטוס rejected לכל מי שגילו קטן מ-18. יש עדכון של מסמך אחד, של כמה מסמכים, ואפשרות upsert: אם אין מסמך מתאים, נוצר חדש.replace מקבל פילטר ומחליף את המסמך כולו במה שנשלח בפקודה.delete one מוחק רשומה אחת, delete many מוחק את כל מי שעונה על הקריטריון, ו-remove בודק קריטריון על כל מסמך ומוציא אותו מה-collection._id: _id הוא השדה היחיד שחובה. הוא ייחודי ב-collection, וגודל מסמך מגיע לכל היותר ל-16 מגה. הערך יכול להיות מספר, הקסדצימלי או תאריך, אבל לא מערך.w: 1: ברירת המחדל. מחכים לאישור מה-Primary בלבד, גם אם הנתונים עוד לא נכתבו לכל ה-replica set.w: 0: לא מחכים לשום אישור, לביצועים גבוהים. מניחים שהפקודה תיכנס ותתפשט.w: 4 אומר שמחכים לכולם. זה איטי משמעותית.majority: מחכים לאישור מרוב השרתים. הוא איטי יותר, אבל נותן את מירב היציבות, האמינות והזמינות. בדוגמה של ארבעה שרתים w: 4 מתאים בערך ל-majority, אבל כשמוסיפים עוד שרתים majority מתאים את עצמו ו-4 נשאר קבוע.wtimeout: זמן מקסימלי במילישניות שמחכים לאישור. הוא מונע מתהליך תקוע לחסום את שאר התהליכים בשרת, ובסיומו התהליך נכשל או מדווח שלא התקבל אישור, ולא ממשיך להמתין.הטקסט המלא של הדקות הראשונות בהרצאה «עדכון נתונים ב-MongoDB» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
נעבור כעת hands-on על פקודות פרוד, פקודות לשליפה, לעדכון, למחיקה ולהוספה של נתונים. פקודה ראשונה, פקודת Fetch, פקודה שבה אנחנו שולפים נתונים, הפקודה עצמה נקראת Find, כפי שניתן לראות.
כדי להתייחס לפקודה עצמה, אנחנו צריכים לרשום קידומת של DB, כלומר בדאטאבייס הנוכחי שבו אנחנו נמצאים, תחת ה-Collection של Users, תחת Collection של Users, אנחנו מחפשים את הדוקיומנטים הבאים.
מה הם הדוקיומנטים שאנחנו מחפשים? שימו לב, יש לנו שתי פסקאות שנכנסות בתוך פקודה של פיינד. פסקה ראשונה זה הקריטריה, זה ה-workloads, זה הפקודה שבה אנחנו מציינים אייג' גדול מ-18.
כל פקודה שרשום כאן דולר GT, זאת אומרת שזה greater than 18. ניתן לראות גם EQ, שזה equal ואת כל הפקודות הללו ניתן לראות בתוך ה-help של מונגו דיבי.
נבחן עוד אופרטורים נוספים שקיימים כמו gt ו-gte, נעבור רגע לתוך ה-help שלנו, בתוך המניואל, ושימו לב אנחנו יכולים לראות כאן אופרטורים נוספים.
דולר eq, משמעות הדבר שזה equal, זה ממש כאילו רשמנו שווה, מאחר ואנחנו בתוך שפת ג'ייסון אנחנו לא רושמים סימן קטן, סימן גדול או שווה, אנחנו משתמשים או באופרטור eq-equal gt-greater-than greater-than-or-equal איבר מסוים שווה או גדול מאיבר אחר קטן מ-little-than-or-equal
ו-ne-not-equal כלומר אוסף של אופרטורים על מנת לבצע השוואה הם כולם נמצאים כאן בתוך המנואל של מונגו ובתוכם אנחנו יכולים להשוות בין שני איברים שונים.
שימו לב שיש לנו כאן את האופרטור cmp, שהוא דומה לפונקציה שנמצאת בשפת c שנקראת str compare, שמה שהוא מחזיר לנו זה 0 במידה ושני האיברים שווים, equal, אחד אם הראשון הוא גדול מהשני ומינוס אחד אם הראשון הוא קטן מהשני וזאת אומרת השני גדול מן הראשון, אנחנו מקבלים מינוס אחד אז דולר cnp
compare מחזיר לנו כל אחת מהאפשרויות הללו. נחזור כאן לתוך המצגת שלנו. בדוגמה שלנו אנחנו מבקשים את כל אלו שהגיל שלהם גדול מ-18. זה ה-query קריטריה.
עכשיו בפרוג'קשן זה הפסוקית של ה-select, זה המחליף כאן של מה שהיינו רושמים פעם בפקודת סלקט. כאן זה בעצם ה-select עצמו שבו אנחנו מציינים אילו עמודות אנחנו רוצים להציג במקרה הזה?
כל עמודה שאני מציין לה 1, משמעות הדבר שאנחנו רוצים אותה name.1, address.1, זאת אומרת שאנחנו רוצים לקבל שתי עמודות בלבד, וכמה שורות אנחנו יכולים לחתום אותן, את מספר השורות, על ידי limit 5, זאת אומרת שלווילי מקסימום 5 שורות.
הפקודה כאן בעצם המקבילה למצב שבו אנחנו שולפים where h גדול מ-18, Select Name, Seek Address, Top 5 על מנת לקבל רק את החמישה הראשונים בלבד.
נתקרב לפקודה הבאה, פקודת Update. בפקודת Update, שוב פעם, יש לנו קידומת של שם של הדאטאבייס הנוכחי שבו אנחנו נמצאים. זה לא השם של הדאטאבייס אלא זה מילה שמורה DB שמציינת את הדאטאבייס הנוכחי.
ה-Collection, ובתוך ה-Collection עכשיו אנחנו מציינים מה אנחנו רוצים לעדכן. הדוקומנטים שממלאים אחר הקווירי, שממלאים אחר הדרישות בתנאי הבוליאני שיש כאן בתוך הקווירי.
אותם אנחנו רוצים לעדכן. מה אנחנו רוצים לעדכן? זה מה שיש לנו כאן בתוך הפסוקית של Update. וכאן ב-Update הזה, בניגוד למה שאנחנו מכירים מעולם הרלציוני של MySQL או SQL או רק עם שפת SQL, כאן יש לנו אפשרות לעדכן one, many או absurd.
כשמשמעות הדבר שאם הביטוי עצמו לא קיים אנחנו מכניסים אותו. כלומר מדובר כאן על פקודה שהיא Update או Insert. אם אנחנו מוצאים את הרשומה אנחנו מעדכנים אותה ואז זה קורה Update ואם לא מצאנו רשומה כזאת אנחנו מייצרים רשומה כזאת ומכניסים אותה בתוך ה-Documents, מכניסים אותה בתוך ה-Collection.
כלומר מייצרים דוקומנט כזה ומכניסים אותו בפנים. נעבור בעצם על סיכום הפקודות שנמצאות אצלנו בנושא של Update Operation. מעבר ל-Update אז יש לנו Update 1 שהיא כאמור אנחנו רוצים לעדכן רשומה בודדת בלבד.
כאשר אנחנו רוצים לעדכן כמה רשומות זה ה-Update Meily. אלו פקודות שאנחנו יכולים להריץ אותן דרך השל וה-Replace 1. Replace 1 זוהי פקודה שמגיעה יחד עם פילטר כלומר אנחנו צריכים איזושהי קריטריה על מנת לחפש את הרשומות עצמם, ואותם אנחנו מחליפים, כלומר מחליפים את כל
הדוקיומנט עם הקולקשן שאותו אנחנו שולחים כחלק מהפקודה עצמה. הפקודה עצמה מבצעת חיפוש על מנת למצוא את הדוקיומנטים הרלוונטיים, אלו שעולים על הדרישה, על הקריטריה, וברגע שמצאנו אותם אנחנו בעצם מחליפים אותם לפי המידע שאותו אנחנו שולחים בפקודה עצמה.
בואו נראה עוד פקודות. אז עבדת מני, הנה הרי לפנינו דוגמה, אם אני רוצה לבדוק שוב פעם, Age קטן מ-18, זה הקריטריה, זה הפילטר, זה ה-Workloads שלי שבו אני בודק.
לאחר מכן, כשאני רוצה לעדכן, אז יש לנו פקודה שנקראת Dollar Set, מהי אותה ההשמה, ה-Set שאותו אנחנו רוצים, בתוך סוגריים מסובסדות אנחנו מציינים רשימה של המוערכים עצמם, של השדות עצמם, של הפילדס, נקודותיים, הערך החדש.
אז במקרה שלנו אנחנו רוצים לעדכן את כל אלו שהגיל שלהם קטן מ-18 לערך סטטוס שווה ריג'קט. לעדכן להם את הסטטוס שהוא יהיה שווה לריג'קט.
בכל פקודה, בכל רשומות זה יקרה, בכל הרשומות שעונות על הקריטריונים. מאחר וכתבנו כאן update many ולא update 1. ולמטה יש לנו גם את ההערה שבעצם בכל דוקיומנט שאנחנו מכירים חייב להיות האנדרסקור איי-די, כפי שדיברנו עליו בעבר, זה השדה היחיד שהוא מנדטורי, זה בעצם הכלל היחיד שיש במולגו db, כי על מולגו db אפשר להגיד שאין סכמה ואין בכלל כללים ואין בכלל אילוצים,
אבל הכלל היחיד שעוד אפשר להגיד מעבר לזה שאין כללים, זה שיש עמודה אחת שנקראת underscore ID והיא מכילה מספר יוניקי ברמת ה-collection על מנת לזהות באופן חד חד ערכי כל דוקיומנט.