מדריך MongoDB: עדכון נתונים

מדריך לעדכון documents ב-MongoDB

במאמר הקודם למדנו על שאילתות מורכבות יותר ב-MongoDB – איך לא רק לחפש documents עם ערך מסוים אלא לחפש טווח של ערכים או במגוון של ערכים – למשל "גם וגם" או "גם וגם ואו". במדריך הזה אני אסביר על עדכון נתונים ב-MongoDB.

עדכון הנתונים נעשה באמצעות מתודת update. המתודה עצמה מאוד פשוטה לשימוש, לפחות בהתחלה… אבל את זה אפשר לומר על כל דבר בתכנות. איך אנחנו מתחילים? ב-db. לא לשכוח שאנחנו צריכים לכתוב use test לפני שאנחנו מתחילים לעבוד על מסד נתונים ששמו הוא test. אחרי כן? ה-collection שלנו. אם אנחנו לא זוכרים מהו, show collections יראה לנו את כל ה-collections במסד הנתונים שלנו. ואחרי כן? update. במתודה הזו אנו צריכים להגדיר עבור מי אנחנו מכניסים את העדכון וגם באיזה עדכון מדובר.

באחד המדריכים הקודמים יצרתי collection ששמו הוא testData:


> db.testData.find()
{ "_id" : ObjectId("541d89baefb5139de0d37abe"), "name" : "ran" }
{ "_id" : ObjectId("541d9187efb5139de0d37abf"), "name" : "Omri" }
{ "_id" : ObjectId("541d9197efb5139de0d37ac0"), "name" : "Kfir" }
{ "_id" : ObjectId("541d9197efb5139de0d37ac1"), "name" : "Daniel" }
{ "_id" : ObjectId("541d9197efb5139de0d37ac2"), "name" : "Michal" }

נניח ואני רוצה לשנות את ה-document הראשון. איזה שינוי? מ-ran (אות קטנה) ל-Ran (אות גדולה). איך אעשה את זה? קודם כל: db.testData.update שמקבלת שני אובייקטים: item ו-set$. באובייקט item אני מגדיר את התנאים שאני רוצה עבור האובייקט וב-set אני מגדיר את השינוי. כך זה נראה:


db.testData.update({
    "name": "ran"
}, {
    $set: {
        "name": "Ran"
    }
})

אם אני אכניס את הפשתגן הזה, אני אגלה ש-ran השתנה ל-Ran. פשוט, לא? עכשיו בוא נסבך את זה עוד קצת. אנחנו יכולים, אם אנו רוצים, לבדוק אם יש ערך. אם כן – לעדכן ואם לא? אז לערוך ולשנות. איך עושים את זה? בדיוק ככה:


db.testData.update({
    "name": "Ran"
}, {
    "name": "ran"
}, {
    upsert: true
})

כאן אני מחפש ערך ששמו הוא: Ran, אם אני אמצא, אז אני אעדכן אותו ל-ran. אם לא, אני אכניס אותו.

אם אני רוצה לעדכן יותר מערך אחד, אין דבר פשוט מזה – כל מה שאני צריך לעשות זה פשוט להוסיף multi: true לעדכון רגיל. למשל:


db.testData.update({"name":/a/},{$set:{"name":"name with a"}},{multi: true})

מה הולך פה? מאוד פשוט – שימוש ב-update. התנאי הראשון הוא תנאי כמו כל תנאי אחר, אבל אני יודע שהוא יחזיר לי כמה תוצאות, ה-set$ הוא אותו אחד שראינו כמה דוגמאות למעלה. במקרה הזה הוא פשוט יחליף את השמות שעונים לתנאי הראשון (יש בהם a) למחרוזת כלשהי. מה שמיוחד הוא שהכנסתי multi:true וזה הכל – במקום לעדכן רק document אחד (אפילו עם יש מיליארד שעונים על התנאים) הוא יעדכן כל document שעונה על התנאי.

ואם אנחנו רוצים למחוק נתונים? אין פשוט מזה – אנו נשתמש ב-remove


> db.testData.remove({"name":/a/})


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


db.testData.remove({"name":/a/},true)

אם אני רוצה למחוק את כל ה-documents שיש לי ב-collection, אני פשוט אעביר אובייקט ריק:


db.testData.remove({})

ועל מנת להפטר לחלוטין מה-collection, כך שאפילו כשאחפש את ה-collection באמצעות show collections אני לא אראה דבר, כל מה שעלי לעשות זה להשתמש ב:


db.testData.drop()

עד כאן בנוגע לעדכון! במדריך הבא נצלול מעט יותר עמוק ונדבר על מודל נתונים נכון ל-MongoDB – במיוחד בהשוואה למבנה נתונים רלוציוני.

פוסטים נוספים שכדאי לקרוא

פתרונות ומאמרים על פיתוח אינטרנט

לא פרצו לנו, רק דלף לנו – לקחים טכניים מפרשת אלקטור

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

בינה מלאכותית

התקנה של Openclaw על רספברי פיי

איך מתקינים את הלהיט החדש בתחום על רספברי פיי? קל ופשוט ללא חומרה מיוחדת ועם הסבר מפורט.

בניית אתרי אינטרנט

לאחסן שרת בבית? זה לגמרי אפשרי

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

פתרונות ומאמרים על פיתוח אינטרנט

העולם המדהים של Chrome debugging

איך תוכנות שונות מפעילות את כרום כרצונן? איך דיבאגר בפרונט עובד? צלילה לעומק לתוך העולם המופלא של CDP

גלילה לראש העמוד