NoSQL Zone is brought to you in partnership with:

A Yahoo! employee. Currently "playing" as a mobile engineer. The posts and comments here are my own and don't necessarily represent my employer, Yahoo!. You, or anyone else, don't have to be agree with what I'm posting or commenting on. Kristiono has posted 9 posts at DZone. You can read more from them at their website. View Full User Profile

Node.js and MongoDB, A Beginner’s Approach

04.25.2012
| 12686 views |
  • submit to reddit

This is not a book and I didn’t try to sell a book to you.

The term “A Beginner’s Approach” reflects my own tribulations trying to connect Nodejs to MongoDB as a beginner in these technologies. There are lots of libraries available to use when connecting Node.js to MongoDB. If you were trying to get your feet wet, and that’s what I’ve been doing, you probably want to try this approach. I can’t promise anything but at least, you will not get a headache.

First, read about Nodejs. After that, MongoDB. If you’re already familiar with it, skip it and install both on your system. There maybe vary depending on your system. If you use Mac and Homebrew (or MacPorts), you’re lucky. Just do this:

$ brew install node

to install Nodejs, and:

$ brew install mongodb

or

$ sudo port install mongodb

to install MongoDB.

Next, you should familiar on how Nodejs and MongoDB works. Playing a whole day is probably enough to grasp the idea if you are a Javascript-ers and you are familiar with web server programming. If you aren’t, you should have no problem learning them in a short time, probably a week or two, if you willing to.

Okay, here’s the fun part. Oh wait, we need to install one more additional driver to connect from Nodejs to MongoDB. I’ve picked node-mongodb-native by christkv and I recommend you to install it too. It’s easy.

$ npm install mongodb

Now we’re ready to go.

To prepare a connection to MongoDB, you can create variables that define the database and its server, like this one:

var Db = require('mongodb').Db;
var Server = require('mongodb').Server;

and then instantiate a database client:

var client = new Db('test', new Server('127.0.0.1', 27017, {}));

'test' is your database name. This is usually available from the first time you install MongoDB. The IP address is obvious. 27017 refers to the specific port of your database.

Next, you may want to define the action for insert, remove, update, and show the data. Here’s mine.

var insertData = function(err, collection) {
    collection.insert({name: "Kristiono Setyadi"});
    collection.insert({name: "Meghan Gill"});
    collection.insert({name: "Spiderman"});
    // you can add as many object as you want into the database
}

var removeData = function(err, collection) {
    collection.remove({name: "Spiderman"});
}

var updateData = function(err, collection) {
    collection.update({name: "Kristiono Setyadi"}, {name: "Kristiono Setyadi", sex: "Male"});
}

var listAllData = function(err, collection) {
    collection.find().toArray(function(err, results) {
        console.log(results);
    });
}

Now, the final step is to open the connection and do what you want with your already-defined action above.

client.open(function(err, pClient) {
    client.collection('test_insert', insertData);
    client.collection('test_insert', removeData);
    // etc.
}

You’ve noticed that there is a 'test_insert' parameter. 'test_insert' is your collection name (you can go with different name though). You can think a collection just like a table in SQL database, but without a relation (that’s why we often call it NoSQL because it has no relationship like SQL does).

These codes are far from perfect. I simplify it for the sake of, surprise surprise, simplicity and easy to understand. I uploaded the source code to my Github too. So if you want to try a little bit further, you can do whatever you like, based on my code, to explore more about Nodejs and MongoDB.

Any comments or questions are definitely welcome.

Update: I forgot to mention that for the sake of simplicity, I’m not including a callback following some operations above. Christkv, the author of the native driver I’ve used here, has give us a clue on his comment below so I just want to say that if you want (and ready) to know more about callback, please read here

Published at DZone with permission of its author, Kristiono Setyadi. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)