שאילתות MongoDB למדען נתונים


 

במאמר הקודם הכרנו את סביבת העבודה של MongoDB.
במאמר זה נלמד כיצד עובדים עם הכלי, בדגש על עבודה עם פורמט json, ושפת השאילתות הייחודית של MongoDB.

מבנה השאילתות ב-MongoDB

לפני התחלת ההסבר על שפת השאילתות ב-MongoDB, חשוב לציין בשלב זה, כי בדומה לכלי NoSQL אחרים, ביצועי הכלי מגיעים במחיר של מגבלה בסוג הפעולות הלוגיות שניתן לבצע. כך, שתי הפעולות הכמעט יחידות אשר ניתן לבצע ב-MongoDB הן חיפוש וסינון מסמכים (מקביל לשאילתת Select ב-SQL), ואגרגציה (מקביל ל-Group By).

הסוגיה המהותית עבור מדען נתונים, היא שאין אפשרות לבצע הצלבה בין שדות (Join\Merge) ב-MongoDB – הפעולה פשוט 'כבדה' מדי בהיבטי המשאבים שהיא דורשת בעבודה עם היקפי נתונים גדולים. הפתרון לסוגיה זו ניתן במידה רבה בעזרת תכנון נכון של הסכימה (שטוחה – במקום מנורמלת ב-SQL).

כאשר בכל זאת נדרשת הצלבת נתונים (לדוגמה: עם נתונים נוספים מ-Api חיצוני), הדרך לבצע אותה היא בסביבת קוד (דוגמת Python).

קיימות שתי דרכים עיקריות למימוש שאילתות ב-MongoDB, הראשונה באמצעות מתודות (פקודות) ייעודיות של הכלי (עושה שימוש ב-Javascript) ב-Mongo Shell, והשניה באמצעות דרייברים לשפות אחרות. במאמר זה נתמקד בשפה המובנית.

 

שליפות פשוטות

שליפה מתוך מאגר (Collection) תתבצע בעזרת המתודה find, באופן הבא:
MongoDB Find Method

להלן מספר דוגמאות לשליפות, עבור מאגר נתונים לדוגמה, המתאר נתונים של 4 משתמשים דמיוניים:

  • שליפת כלל הנתונים, כולל שימוש בפורמט json (שדה ה-"_id" הוא שדה המפתח של כל רשומה):

MongoDB Find Method Json

  • שליפת נתוני השמות והגיל בלבד, עבור המשתמשים בני מעל ל-30 ועד 60 (כולל):
    MongoDB FInd Method Complex
  • שליפת נתוני השמות והגיל בלבד, עבור המשתמשים בני מעל ל-30 ועד 60 (כולל), ואשר העיסוק שלהם מכיל את המילה "data":
    MongoDB Find Method Regex
  • כמה משתמשים יש מעל לגיל 40 (כולל):
    MongoDB Find Method Count

 

שליפות מבוססות אגרגציה

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

  • מציאת הגיל המינימלי והגיל המקסימלי:
    MongoDB Aggregate Method Min Max
  • מציאת העיסוק הנפוץ ביותר, בהינתן שהגיל בין 30 ל-70 (לא כולל), והתוצאה קטנה מ-100; מיון לפי העיסוק הנפוץ ביותר, בסדר יורד:
     MongoDB Aggregate Method Group
  • מציאת בסיס הנתונים בעל מספר המשתמשים הרב ביותר (שדה המערך "db_examples"):
    MongoDB Aggregate Method Group By Array - Unwind

 

פקודות נוספות

להלן מספר פקודות/ מתודות נוספות שחשוב להכיר בעבודה עם MongoDB:

  • הכנסת מסמכים (רשומות) בפורמט json לתוך מאגר קיים:

db.TargetCollection.insert(<json documents>)

  • מחיקת מאגר:

db.sourceCollection.drop()

  • שמירת תוצאות שאילתה במאגר חדש:

db.sourceCollection.find().forEach(function(SaveToNewCollection){db.TargetCollection.save(SaveToNewCollection);})

MongoDB Insert Drop Function

  • הפעלת קוד שאילתה/ מתודה מתוך קובץ 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 Export Data to CSV File

 

עד כאן הבסיס לתחילת העבודה עם MongoDB, כעת נותר רק לתרגל את השימוש בכלי.

מצורפים קובץ דוגמה למאגר (בפורמט js), ורשימת השאילתות.

למתקדמים יותר – מומלץ לשלב את הפעלת ה-MongoDB עם שפת Script דוגמת Python, מה שיאפשר פיתוח תהליכי נתונים מורכבים עם MongoDB.
במאמרים עתידיים יוצגו יישומים כאלה, המשלבים MongoDB ו-Python להתממשקות, שמירה וניתוח נתונים מ-Api’s מגוונים, בין השאר של Twitter ו-Github.

השארת תגובה