במאמר הקודם הכרנו את סביבת העבודה של MongoDB.
במאמר זה נלמד כיצד עובדים עם הכלי, בדגש על עבודה עם פורמט json, ושפת השאילתות הייחודית של MongoDB.
מבנה השאילתות ב-MongoDB
לפני התחלת ההסבר על שפת השאילתות ב-MongoDB, חשוב לציין בשלב זה, כי בדומה לכלי NoSQL אחרים, ביצועי הכלי מגיעים במחיר של מגבלה בסוג הפעולות הלוגיות שניתן לבצע. כך, שתי הפעולות הכמעט יחידות אשר ניתן לבצע ב-MongoDB הן חיפוש וסינון מסמכים (מקביל לשאילתת Select ב-SQL), ואגרגציה (מקביל ל-Group By).
הסוגיה המהותית עבור מדען נתונים, היא שאין אפשרות לבצע הצלבה בין שדות (Join\Merge) ב-MongoDB – הפעולה פשוט 'כבדה' מדי בהיבטי המשאבים שהיא דורשת בעבודה עם היקפי נתונים גדולים. הפתרון לסוגיה זו ניתן במידה רבה בעזרת תכנון נכון של הסכימה (שטוחה – במקום מנורמלת ב-SQL).
כאשר בכל זאת נדרשת הצלבת נתונים (לדוגמה: עם נתונים נוספים מ-Api חיצוני), הדרך לבצע אותה היא בסביבת קוד (דוגמת Python).
קיימות שתי דרכים עיקריות למימוש שאילתות ב-MongoDB, הראשונה באמצעות מתודות (פקודות) ייעודיות של הכלי (עושה שימוש ב-Javascript) ב-Mongo Shell, והשניה באמצעות דרייברים לשפות אחרות. במאמר זה נתמקד בשפה המובנית.
שליפות פשוטות
שליפה מתוך מאגר (Collection) תתבצע בעזרת המתודה find, באופן הבא:
להלן מספר דוגמאות לשליפות, עבור מאגר נתונים לדוגמה, המתאר נתונים של 4 משתמשים דמיוניים:
- שליפת כלל הנתונים, כולל שימוש בפורמט json (שדה ה-"_id" הוא שדה המפתח של כל רשומה):
- שליפת נתוני השמות והגיל בלבד, עבור המשתמשים בני מעל ל-30 ועד 60 (כולל):
- שליפת נתוני השמות והגיל בלבד, עבור המשתמשים בני מעל ל-30 ועד 60 (כולל), ואשר העיסוק שלהם מכיל את המילה "data":
- כמה משתמשים יש מעל לגיל 40 (כולל):
שליפות מבוססות אגרגציה
ביצוע אגרגציות על המאגר יתבצע באמצעות המתודה Aggregate. למתודה מבנה מעט מורכב. חשוב לציין, כי ישנם מספר שימושים למתודה, וכי כל אחד מהרכיבים הוא אופציונלי – בהתאם לצורך:
להלן מספר דוגמאות לשימוש באגרגציה – על מאגר הנתונים הקודם:
- מציאת הגיל המינימלי והגיל המקסימלי:
- מציאת העיסוק הנפוץ ביותר, בהינתן שהגיל בין 30 ל-70 (לא כולל), והתוצאה קטנה מ-100; מיון לפי העיסוק הנפוץ ביותר, בסדר יורד:
- מציאת בסיס הנתונים בעל מספר המשתמשים הרב ביותר (שדה המערך "db_examples"):
פקודות נוספות
להלן מספר פקודות/ מתודות נוספות שחשוב להכיר בעבודה עם MongoDB:
- הכנסת מסמכים (רשומות) בפורמט json לתוך מאגר קיים:
db.TargetCollection.insert(<json documents>)
- מחיקת מאגר:
db.sourceCollection.drop()
- שמירת תוצאות שאילתה במאגר חדש:
db.sourceCollection.find().forEach(function(SaveToNewCollection){db.TargetCollection.save(SaveToNewCollection);})
- הפעלת קוד שאילתה/ מתודה מתוך קובץ Javascript:
Load(“<file path + filename.js>”)
- ייצוא מאגר לקובץ csv
הדרך היעילה ביותר, היא לצאת מה-Shell, ולהפעיל את הפקודה הבאה ב-Command Prompt, מתוך התיקייה של Mongo\Bin:
mongoexport –db <database> –collection <collection name> –csv –fields <required fields, separated by commas> –out <filename>.csv
עד כאן הבסיס לתחילת העבודה עם MongoDB, כעת נותר רק לתרגל את השימוש בכלי.
מצורפים קובץ דוגמה למאגר (בפורמט js), ורשימת השאילתות.
למתקדמים יותר – מומלץ לשלב את הפעלת ה-MongoDB עם שפת Script דוגמת Python, מה שיאפשר פיתוח תהליכי נתונים מורכבים עם MongoDB.
במאמרים עתידיים יוצגו יישומים כאלה, המשלבים MongoDB ו-Python להתממשקות, שמירה וניתוח נתונים מ-Api’s מגוונים, בין השאר של Twitter ו-Github.