מדריך MongoDB: עבודה עם Node.js

התחברות ועבודה עם MongoDB דרך Node.js תוך שימוש ב-MongoDB Native

במאמר הקודם דיברנו על MongoDB ו-Node.js. במאמר הזה אני אדבר על Node.js ו-MongoDB. בשנים האחרונות MongoDB הולכת בעיקר יד ביד עם Node.js. זה לא פלא גדול כל כך, שתיהן עובדות עם JavaScript ומאוד קל לדלג בין MongoDB ל-Node.js. גם ל-Node.js יש שפע של מודולים שמטפלים ועובדים עם MongoDB. הפופולריות הגדולה של MEAN stack גם גרמה לזה בעקיפין.

יש מספר מודולים של Node.js שמטפלים בחיבור ל-MongoDB. שניים מהם הם מאוד פופולריים. הראשון הוא node-mongodb-native והוא הדרייבר הטבעי של Node.js ל-MongoDB. השני הוא Mongoose שיושב בעצם על גבי MongoDB Native ומבצע גם סוג של ORM. במאמר הזה אני אסביר על MongoDB Native. כל הדוגמאות מבוססות על הדוגמאות מהגיטהאב של MongoDB native.

לפני תחילת העבודה אנו צריכים ששרת ה-MongoDB ירוץ. מה זה שרת? זה בעצם השירות שמאפשר לכל תוכנה להתחבר ל-MongoDB. בדיוק כפי שאנו מרימים (למשל) שרת כדי לקבל פקודות באמצעות socket מתוכנות אחרות.


mongod --dbpath=/data --port 27017

הפרוסס הזה צריך לרוץ אם אנו רוצים לעבוד מול MongoDB. שימו לב שצריכה להיות לכם הרשאה ל data\

הערה חשובה: אם אתם עובדים עם MongoDB באמצעות PHP באותה מכונה והתקנתם את MongoDB Driver באמצעות PEAR כמו במאמר הקודם, לא תצטרכו לבצע את הצעד הזה כיוון שהשרת כבר יעבוד אצלכם.

איך בודקים שהכל תקין? נכנסים אל: localhost:27017 עם הדפדפן ורואים ש:


It looks like you are trying to access MongoDB over HTTP on the native driver port.

הצעד הבא הוא להתקין את המודול דרך npm. ככה עושים את זה באופן לוקלי:


npm install mongodb

ועכשיו אפשר להתחיל לעבוד. האמת היא שהעבודה היא יחסית פשוטה. נניח ואנו רוצים להתחבר למסד הנתונים test. את זה אנו מגדירים כבר בחיבור:


var MongoClient = require('mongodb').MongoClient;
// Connect to the db
MongoClient.connect("mongodb://localhost:27017/test", function(err, db) {

//Async function
    
});

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

אחרי שבחרנו את ה-DB, אנחנו צריכים לבחור מול איזה collection לעבוד. גם זה קל


var MongoClient = require('mongodb').MongoClient;
// Connect to the db
MongoClient.connect("mongodb://localhost:27017/test", function(err, db) {
    if(err) { return console.dir(err); } //handling errors

    var collection = db.collection('users'); //selecting the collection
    
});

כאן אני בוחר ב-collection users. קל ופשוט. מפה אני יכול להתחיל לבצע פעולות. ה-find מתחיל מה-collection, בדיוק כמו בקונסולה. אם עברתם על המדריך וקצת תרגלתם, אתם יודעים שאני צריך להשתמש ב-find. בואו נשתמש ב-find כדי למצוא את x:19 במשתמשים שלנו (תרגלנו את מסד הנתונים הזה במאמרים הקודמים ויש שם הוראות איך ליצור אותו).


var MongoClient = require('mongodb').MongoClient;
// Connect to the db
MongoClient.connect("mongodb://localhost:27017/test", function(err, db) {
    if(err) { return console.dir(err); } //handling errors

    var collection = db.collection('users'); //selecting the collection
    
    collection.find({"x":19}).toArray(function(err, items) { //foreach
        console.log(items);
    });
    
});

במקרה הזה אנו מדפיסים את מה שאנו מקבלים לתוך מערך ומדפיסים את התוצאות. מאוד חשוב להקפיד שאם ה-x הוא string להקיף אותו במרכאות!

ואיך אני מכניס נתונים? עם מתודת insert, אנחנו מעבירים לה אובייקט JSON


var MongoClient = require('mongodb').MongoClient;
// Connect to the db
MongoClient.connect("mongodb://localhost:27017/test", function(err, db) {
    if(err) { return console.dir(err); } //handling errors

    var collection = db.collection('users'); //selecting the collection

    var doc = {"x" : 999, "name" : "Ran" }; //valid JSON ibject

    collection.insert(doc,function(err, result) {
        if(err) throw Error;
        console.log(result); //we are getting back the object inserted
    });


    collection.find({"x":999}).toArray(function(err, items) { //foreach
        console.log(items);
    });

});

ועדכון? בערך באותה דרך


var MongoClient = require('mongodb').MongoClient;
// Connect to the db
MongoClient.connect("mongodb://localhost:27017/test", function(err, db) {
    if(err) { return console.dir(err); } //handling errors

    var collection = db.collection('users'); //selecting the collection

    collection.update({"x":999}, {$set:{"name":"moshe"}}, function(err, result) {
        console.log(result); //return true in case of success
    });
    
});

ועדכון של יותר מערך אחד? זה שצריך להעביר ,{multi: true} בשבילו?


var MongoClient = require('mongodb').MongoClient;
// Connect to the db
MongoClient.connect("mongodb://localhost:27017/test", function(err, db) {
    if(err) { return console.dir(err); } //handling errors

    var collection = db.collection('users'); //selecting the collection

    collection.update({"x":999}, {$set:{"name":"moshe"}}, {multi: true}, function(err, result) {
        console.log(result); //return true if success
    });
});

באופן עקרוני, כך אנו מעבירים אוביקטים נוספים בכל מצב – גם ב-insert או ב-find.


var MongoClient = require('mongodb').MongoClient;
// Connect to the db
MongoClient.connect("mongodb://localhost:27017/test", function(err, db) {
    if(err) { return console.dir(err); } //handling errors

    var collection = db.collection('users'); //selecting the collection

    collection.remove({"x":999}, function(err, result) {
        console.log(result); //number of deleted items
    });

});

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

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

במאמר הבא אנו נדבר על MongoDb: Aggregations.

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

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

עבודה עם GPT למתכנתים

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

פייתון

קבצי קונפיגורציה בפואטרי

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

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