Node MongoDB

MongoDB menyediakan driver resmi untuk platform Node.js. Module npm ini tersedia di link berikut https://www.npmjs.com/package/mongodb dan dapat dengan mudah di install melalui npm

$ npm install --save mongodb

Penulis mengasumsikan bahwa MongoDB sudah terinstal dan berjalan pada sistem. Untuk memulai koneksi dapat dengan mudah dilakukan seperti script berikut ini,

app.js

var MongoClient = require('mongodb').MongoClient; 
var MONGODB_URL = 'mongodb://localhost:27017/sample';

MongoClient.connect(MONGODB_URL, function(err, db){
    err ? console.log(err): console.log('Koneksi ke MongoDB Ok!');
    db.close();
});

MongoDB akan membuat database baru jika database tersebut tidak ada, seperti halnya dengan database sample pada kode diatas karena sebelumnya database ini tidak ada maka secara otomatis MongoDB akan membuatnya. Bentuk umum URI untuk koneksi ke MongoDB adalah seperti berikut

mongodb://<username>:<password>@<localhost>:<port>/<database>

Jalankan apikasi di terminal dan jika tidak ada masalah maka akan muncul pesan pada konsol bahwa koneksi ke MongoDB telah sukses.

$ node app.js
Koneksi ke MongoDB Ok!

Berikutnya akan kita lakukan operasi dasar untuk MongoDB yaitu CRUD tapi sebelumnya kita buat schema terlebih dahulu.

person.js


function PersonSchema(data) {
    this.nama = data.nama;
    this.email = data.email;
    this.username = data.username;          
};

module.exports = PersonSchema;

Schema diatas merupakan model data sederhana yang dituliskan dalam object JavaScript dan tanpa built-in type casting ataupun fitur validasi. Jika anda membutuhkan pemodelan data yang lebih handal dan lebih baik, maka pakailah pustaka ODM (Object-Document Modeler) seperti Mongoose.

Driver Node MongoDB menyediakan API yang lengkap untuk bekerja dengan database ini. Silahkan lihat link berikut untuk melihat lebih lengkap tentang API ini

http://mongodb.github.io/node-mongodb-native/2.0/api/Collection.html#insert

Insert

Untuk memasukkan dokumen bisa memakai metode insertOne() untuk memasukkan satu dokumen

app.js

/**
* Balajar Node - MongoDB
*
*
* MIT
* Equan Pr. 2015
*/

var PersonSchema = require('./person.js');
var MongoClient = require('mongodb').MongoClient;
var MONGODB_URL = 'mongodb://localhost:27017/sample';

var person = new PersonSchema({
    nama: 'Kebo Ijo',
    email: 'kebo@ijo.xyz',
    username: 'obek_rebo'
});

MongoClient.connect(MONGODB_URL, function(err, db){
    err ? console.log(err): console.log('Koneksi ke MongoDB Ok!');
    db.collection('persons').insertOne(person, function(err, result){
        if(err){
           console.log(err);
        } else {
           console.log(result);
        }
        db.close();  
    })
});

Secara otomatis operasi insert ini akan menghasilkan primary key _id yang unik yaitu berupa ObjectId. Yang membedakan _id ini dengan id pada database yang lain adalah dengan ObjectId bisa didapatkan kapan data ini dimasukkan melalui pemakaian metode getTimestamp().

$ mongo
MongoDB shell version: 2.6.9
connecting to: test

>  _id = ObjectId()
ObjectId("55d81f48bb934a51424dbd37")

> ObjectId("55d81f48bb934a51424dbd37").getTimestamp();
ISODate("2015-08-22T07:05:44Z")

>

Jika anda mempunyai banyak dokumen, untuk memasukkan dokumen-dokumen tersebut ke collection persons anda bisa memakai metode insertMany().

Update

Operasi update data juga cukup mudah apalagi jika anda sangat pahamn tentang MongoDB. Untuk meng-update data bisa dilakukan melalui metode updateOne() atau updateMany().

app.js

var PersonSchema = require('./person.js');
var MongoClient = require('mongodb').MongoClient;
var MONGODB_URL = 'mongodb://localhost:27017/sample';

var person = new PersonSchema({
    nama: 'Kebo Ijo',
    email: 'kebo@ijo.xyz',
    username: 'obek_rebo'
});

MongoClient.connect(MONGODB_URL, function(err, db){
    err ? console.log(err): console.log('Koneksi ke MongoDB Ok!');
    db.collection('persons').insertOne(person, function(err, result){
        if(err){
             console.log(err);
        } else {
             console.log('Simpan data person ok!');

           //update data
           var personUpdate = {
               nama: 'Sukat Tandika'
           }
           db.collection('persons').updateOne({nama: person.nama}, personUpdate, function(err, result){
               if(err) {
                 console.log(err);
               } else {
                 console.log('Data person berhasil dimodifikasi!');
               }
               db.close();
           })
        }
    })
});

Metode updateOne() mempunyai beberapa argumen seperti berikut

updateOne(filter, update, options, callback)

Untuk data update anda bisa memakai operator seperti $set contohnya seperti berikut ini

db.collection('persons').updateOne({nama: person.nama}, {$set:{nama: 'Angel'}}, function(err, result){
    if(err) {
        console.log(err);
    } else {
        console.log('Data person berhasil dimodifikasi!');
    }

    db.close();
})

dari beberapa options yang terpenting adalah key upsert yaitu update insert dan jika option ini diberikan maka jika data yang akan di-update tidak ada maka MongoDB secara otomatis akan membuat data yang baru. Untuk lebih jelasnya anda bisa melihat dokumentasi dari API updateOne().

Query

Query data pada database MongoDB dapat dengan mudah dilakukan dengan memakai metode find(), sebagai contoh untuk menemukan data person pada collection persons

MongoClient.connect(MONGODB_URL, function(err, db){
    if(!err){
        findPerson({nama: 'Morbid Angel'}, db, function(err, doc){
            if(!err){
                console.log(doc);
            } else {
                console.log(err);
            }
            db.close();
        });
    } else {
        console.log(err);
    }
});


function findPerson(filter, db, callback){
  var cursor = db.collection('persons').find(filter);
  cursor.each(function(err, docResult){
      if(err){
          callback(err, null);
      } else {
          if(docResult != null) {
              console.log(docResult);
              callback(null, docResult);
          } else {
              callback(null, 'empty!');
        }
      }
  })
}

Dengan metode find() anda bisa memakai operator query seperti $lt, $gt, operator kondisi AND, OR dll. Untuk lebih lengkapnya silahkan lihat dokumentasi query dari driver node MongoDB.

Delete

Untuk menghapus data anda bisa menggunakan fungsi deleteOne() atau deleteMany(). Misalnya untuk menghapus semua data pada collection persons anda bisa menggunakan empty object {} sebagai query.

function deleteAllPerson(db, callback){
    db.collection('persons').deleteMany({}, function(err, rec){
        if(!err) {
            callback(null, rec.result.n);
        } else {
            callback(err, null);
        }
    })
}

atau jika ingin menhapus satu data pada collection person

fucntion deletePerson(filter, db, callback){
    db.collection('persons').deleteOne(filter, function(err, rec){
        if(!err) {
            callback(null, rec.result.n);
        } else {
            callback(err, null);
        }
    })
}

Dua fungsi ini bisa anda lihat secara lengkap pada dokumentasi API MongoDB.