מדריך 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 – במיוחד בהשוואה למבנה נתונים רלוציוני.

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

אהבתם? לא אהבתם? דרגו!

לא אהבתי בכלללא אהבתיבסדראהבתיאהבתי מאוד (2 הצבעות, ממוצע: 5.00 מתוך 5)

תגיות: פורסם בקטגוריה: MongoDB

אל תשארו מאחור! יש עוד מה ללמוד!

One comment on “מדריך MongoDB: עדכון נתונים
  1. Assaf הגיב:

    פשתגן ולא פתשגן?