מדריך 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.

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

בינה מלאכותית

להריץ ממשק של open-webui על הרספברי פיי

להפעיל ממשק של צ׳אט ג׳יפיטי שאפשר לגשת אליו מכל מחשב ברשת הביתית על רספברי פיי עם מודל בשם tinydolphin שרץ על רספברי פיי.

בינה מלאכותית

Safeguards על מודל שפה גדול (LLM)

פוסט בשילוב עם פודקאסט וסרטון על ההגנות שאפשר להציב על LLM בסביבת פרודקשן

תמונה של עציץ, רספברי פיי ורמקול
רספברי פיי

לגרום לעציץ שלכם לדבר

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

DALL·E 2023-10-21 22.28.58 - Photo of a computer server room with red warning lights flashing, indicating a potential cyber threat. Multiple screens display graphs showing a sudde
יסודות בתכנות

מבוא לאבטחת מידע: IDOR

הסבר על התקפה אהובה ומוצלחת שבאמצעותה שואבים מידע מאתרים

רספברי פיי

מה זה AIoT? ואיך אפשר להתחיל?

פוסט עם המון קישורים, מידע, סרטונים ופרק בפודקאסט שיפתח לכם שער לעולם ה-AIoT המרתק.

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