ארכיון יומי: 19 אוגוסט, 2010

טיפים לעבודה בmongodb חלק ראשון

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

אחד המקומות הראשונים שנופלים במונגו הוא בעדכון מידע (בחלק הבא אדבר על חיפוש מידע). ישנם כמה צורות לעדכון מידע. למשל השימוש ב save מול update אשר שניהם מבצעים את אותה הפעולה רק בגישות שונות. אבל יותר מזה, השימוש ב update לרוב בהתחלה אינו מבוצע נכון וגורם לתסכול רב (לפחות לי זה קרה).

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

אבל ההבדל האמיתי הוא ש save מקבל אובייקט ומוסיף או מעדכן אותו כמו שהוא, בעוד ש update מקביל לפעולת where ב SQL, מאפשר לנו למצוא משהו לפני כן, ואם הוא נמצא מעדכן ואם הוא לא נמצא אנחנו יכולים להגיד לו בפרמטר של upsert להגיד לו להוסיף את הרשומה. כך שאנחנו חייבים גם להיזהר כאן כי במידה וחשוב לנו לעדכן רק כאשר המידע נמצא, ולא לעדכן אם הוא לא, אז פעולת where תתאים לנו, אבל רק אם נעבוד איתה נכון (קרי upsert יהיה false).

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

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