Mongoose, MongoDB object modeling buat NodeJS

Mongoose adalah sebuah module pada NodeJS yang di install menggunakan npm, berfungsi sebagai penghubung antara NodeJS dan database nosql MongoDB.

Mongoose menyediakan feature diantaranya, model data application berbasis Schema. Dan juga termasuk built-in type casting, validation, query building, business logic hooks dan masih banyak lagi yang menjadi ke andalan mongoose.

Untuk documentasi selengkapnya silahkan mengunjungi website mongoose.

Install Mongoose

Sebelum kita menginstall mongoose, pastikan anda telah menginstall NodeJS dan MongoDB pada komputer anda, lalu buat sebuah directory project dan namai folder itu sesuka anda misal belajar-mongoose.

  • Buka terminal arahkan terminal ke directory project kita, lalu untuk Install MongoDB gunakan command berikut pada terminal,
npm install mongoose  

setelah menginstall mongoose dengan npm, directory project kita akan membuat sebuah folder baru bernama node_module, yang berisi folder mongoose.

  • Buat sebuah file javascript dalam project directory kita, dan beri nama server.js. Setelah itu buka file server.js pada editor kesukaan anda, lalu load module mongoose,
var mongoose = require('mongoose');  

Koneksi ke database MongoDB

Sebelum koneksi ke database kita harus menyalakan terlebih dahulu MongoDB kita. Caranya buka tab baru pada terminal lalu ketik mongod dan enter.

connection-mongod

Jika terdapat tulisan waiting for connections on port 2707 itu artinya database MongoDB sudah siap untuk kita gunakan.

Untuk contoh kasus kita akan menggunakan object mobil, dan kita juga akan mengenal berbagai operasi yang ada pada mongoose.

  • Untuk mengakses database MongoDB dengan mongoose, maka tuliskan kode berikut ini pada server.js.
mongoose.connect('mongodb://localhost/mobil');  

mongodb://localhost/mobil merupakan sebuah url untuk mengakses database MongoDB. Dan yang mana url ini pun dapat di ubah jika kita memiliki data di luar sana selain MongoDB. Mobil adalah database yang akan di gunakan oleh mongoose, jika database mobil belum ada, maka mongose akan otomatis menambahkan database tersebut.

  • Selanjutnya kita akan test koneksi kita dengan sebuah notifikasi gagal atau suksesnya pada console terminal. Tambahkan kode berikut pada file server.js kita.
var db = mongoose.connection  
db.on('error', console.error.bind(console, 'connection error:'));  
db.once('open', function() {  
    console.log('connection success');
});

Buka terminal dan arahkan ke directory project kita, lalu ketikan command node server.js Jika koneksi berhasil terminal akan menampilkan seperti gambar berikut.

test-success

Dan sebagai contoh matikan koneksi MongoDB, dan kembali jalankan dengan node server.js. Maka koneksi akan error sehingga pada terminal akan ada notifikasi berikut ini.

error-connection

Ok kita sudah berhasil mengkoneksikan project kita ke MongoDB melalui module mongoose. Berikut adalah kode lengkapnya.

var mongoose = require('mongoose');  
mongoose.connect('mongodb://localhost/mobil');

var db = mongoose.connection  
db.on('error', console.error.bind(console, 'connection error:'));  
db.once('open', function() {  
    console.log('connection success');
});

Schema & Model

Setiap konfigurasi menggunakan Mongoose harus di sertai dengan Schema. Schema merupakan mapping dari MongoDB collection dan definisi dari type data yang di gunakan pada setiap object dalam collection.

Sedangkan model merupakan sebuah konstruktor compiled yang berasal dari Schema yang sudah kita definisikan.

  • Menulis kode untuk Schema, kita akan membuat data collection mobil pada database MongoDB. Data ini terdiri dari nama, merk, tahun pembuatan, tanggal update, dan transmisi.

kita lanjutkan project kita, buka file server.js pada editor pilihan anda lalu tuliskan kode berikut.

var mobilSchema = mongoose.Schema({  
    nama: String,
    merk: String,
    tahunPembuatan: Number,
    tanggalUpdate: Date,
    transmisi: {
        manual: Boolean,
        outomatic: Boolean
    }
});

Kita beri nama Schema dengan mobilSchema yang menginisiasi object Schema() dari mongoose. Dan kita juga memberi type data pada setiap field.

MongoDB dan Mongoose dapat mendukung type data, String, Number, Date, Buffer, Boolean, Mixed, ObjectId, dan Array.

  • Setelah itu buat sebuah model dengan nama Mobil.
var Mobil = mongoose.model('Mobil', mobilSchema);  

Nantinya collection kita akan bernama mobils, yang di ambil Mobil dari parameter pertama function model.

Saat ini kode kita akan seperti berikut

var mongoose = require('mongoose');  
mongoose.connect('mongodb://localhost/mobil');

var db = mongoose.connection  
db.on('error', console.error.bind(console, 'connection error:'));  
db.once('open', function() {  
    console.log('connection success');
});

var mobilSchema = mongoose.Schema({  
    nama: String,
    merk: String,
    tahunPembuatan: Number,
    tanggalUpdate: Date,
    transmisi: {
        manual: Boolean,
        outomatic: Boolean
    }
});

var Mobil = mongoose.model('Mobil', mobilSchema);  

Menyimpan data ke database

Kita akan membuat sebuah variabel yang berisi sebuah object yang berasal dari Schema yang sudah kita buat.

  • Lanjutkan project kita, buka file server.js dan tambah kan kode berikut
var lamborgini = new Mobil({  
    nama: 'Aventador',
    merk: 'Lamborgini',
    tahunPembuatan: 2015,
    tanggalUpdate: new Date(),
    transmisi: {
        manual: true,
        outomatic: false
    }
});
  • Setelah kita buat data yang ingin di simpan kita buat periksa terlebih dahulu dengan menampilkannya pada terminal, berikan kode berikut
console.log(lamborgini);  

Setelah itu jalankan server node server.js

log-data

  • Buat kode menggunakan function save() dari mongoose untuk menyimpan data kedalam database.
lamborgini.save(function(err) {  
    if (err) {
        console.log(err);
    }
    else {
        console.log('berhasil menyimpan');
    }
});

Jalankan kembali server dengan node server.js. Jika terjadi error terminal akan menampilkan notifikasi error jika berhasil akan tampil berhasil menyimpan pada terminal.

berhasil-simpan

  • Jika sudah berhasil kita akan memeriksa mongodb apakah data sudah tersimpan dengan benar. Buka terminal dan buka tab baru dan ketik command mongo setelah itu perisa semua database dengan perintah show dbs.

open-mongodb

Bertambah satu database bernama mobil sesuai dengan setup konfigurasi yang sudah kita lakukan.

Ketik command use mobil karena kita ingin menggunakan database ini. Masukan perintah show collections untuk melihat semua collections pada database tersebut. Kita baru menambahkan satu collection yaitu mobils.

Untuk melihat data yang sudah tersimpan pada collections mobils ketikan perintah berikut pada terminal

db.mobils.find().pretty()  

read-data

Kita sudah berhasil menyimpan data mobil lamborgini kita ke database. Berikut kode lengkapnya

var mongoose = require('mongoose');  
mongoose.connect('mongodb://localhost/mobil');

var db = mongoose.connection  
db.on('error', console.error.bind(console, 'connection error:'));  
db.once('open', function() {  
    console.log('connection success');
});

var mobilSchema = mongoose.Schema({  
    nama: String,
    merk: String,
    tahunPembuatan: Number,
    tanggalUpdate: Date,
    transmisi: {
        manual: Boolean,
        outomatic: Boolean
    }
});

var Mobil = mongoose.model('Mobil', mobilSchema);

var lamborgini = new Mobil({  
    nama: 'Aventador',
    merk: 'Lamborgini',
    tahunPembuatan: 2015,
    tanggalUpdate: new Date(),
    transmisi: {
        manual: true,
        outomatic: false
    }
});

console.log(lamborgini);

lamborgini.save(function(err) {  
    if (err) {
        console.log(err);
    }
    else {
        console.log('berhasil menyimpan');
    }
});

Membaca data

Kita sudah berhasil menyimpan data yang sudah kita buat, sekarang kita akan menampilkan data yang sudah kita buat kedalam terminal

  • Ketikan kode berikut di dalam file server.js
Mobil.find(function (err, mobils) {  
    if (err)
        return console.error(err);
    console.log(mobils);
})

Sebelum itu kita hapus dulu variable lamborgini yang berisi object data, dan function save karena sudah tidak ingin menyimpan datanya untuk yang ke dua kali.

sehingga kode lengkapnya menjadi seperti ini

var mongoose = require('mongoose');  
mongoose.connect('mongodb://localhost/mobil');

var db = mongoose.connection  
db.on('error', console.error.bind(console, 'connection error:'));  
db.once('open', function() {  
    console.log('connection success');
});

var mobilSchema = mongoose.Schema({  
    nama: String,
    merk: String,
    tahunPembuatan: Number,
    tanggalUpdate: Date,
    transmisi: {
        manual: Boolean,
        outomatic: Boolean
    }
});

var Mobil = mongoose.model('Mobil', mobilSchema);

Mobil.find(function (err, mobils) {  
    if (err)
        return console.error(err);
    console.log(mobils);
})

Jalan kan kode tersebut dengan mengetikan command pada terminal dengan node server.js.

  • Dengan method find() memungkinkan kita untuk menampilkan semua data yang ada di dalam database. Bagaimana jika kita mempunya data yang banyak dalam satu collections dan kita hanya mau menampilkan sesuai Id atau Field yang kita inginkan?

Mongoose mendukung query yang sangat lengkap. Untuk menampilkan data sesuai Id kita bisa menggunaka function findById(), atau jika menampilkan data sesuai field bisa menggunakan findOne().

Find By Id

Model.findById(obj._id, function (err, doc){  
  // doc is a Document
});

Find One

Model.findOne({ nama: "Aventador"}, function (err, doc){  
  // doc is a Document
});

Masih banyak function lainnya seperti menghapus file, dan lain-lain.

Remove

Model.remove(conditions, callback);  

Untuk dokumentasi query javascript yang lebih lengkap silahkan kunjungi website mongoosejs.

Custom method

Mongoose memberikan keleluasaan kita dalam membuat method sendiri yang dapat di gunakan pada project kita.

  • Berikut contoh custom method pada mongoose.
mobilSchema.methods.custom = function() {  
    var lamborgini = this.nama ? "Nama mobil adalah " + this.nama : "Mobil tak punya nama";
    console.log(lamborgini);
}

Custom method harus di definisikan sebelum model.

  • Cara mengaksesnya dengan memanggil method tersebut. Berikut contoh dengan kita membuat sebuat object data dan kita ingin tampilkan di dalam terminal dengan menggunakan custom method.

Tambahkan kode berikut,

var car = new Mobil({ nama: 'Ferarri' });  
car.custom();  

Sehingga kode lengkapnya menjadi seperti ini

var mongoose = require('mongoose');  
mongoose.connect('mongodb://localhost/mobil');

var db = mongoose.connection  
db.on('error', console.error.bind(console, 'connection error:'));  
db.once('open', function() {  
    console.log('connection success');
});

var mobilSchema = mongoose.Schema({  
    nama: String,
    merk: String,
    tahunPembuatan: Number,
    tanggalUpdate: Date,
    transmisi: {
        manual: Boolean,
        outomatic: Boolean
    }
});

mobilSchema.methods.custom = function() {  
    var lamborgini = this.nama ? "Nama mobil adalah " + this.nama : "Mobil tak punya nama";
    console.log(lamborgini);
}

var Mobil = mongoose.model('Mobil', mobilSchema);

var car = new Mobil({ nama: 'Ferarri' });  
car.custom();  

Kita jalankan dengan mengetikan perintah node server.js pada terminal

custom-method

Kesimpulan

Dengan Mongoose kita dapat mengkomunikasikan NodeJS dan MongooDB. Masih ada beberapa module dengan fungsi yang sama seperti mongoose yaitu contohnya Monk, MongoJS, dan masih banyak yang lain. Tetapi dengan fitur dan keunggulan yang baik, sehingga menjadikan Mongoose menjadi pilihan bagi banyak developer NodeJS.

Source code lengkap tutorial ini dapat anda temukan di Github Erabelajar

Eka Prasasti

Chief Technology Officer of Era Belajar (PT Ridaka Indonesia Cerdas). Leads IT team about vision technology in Era Belajar. Multi-skilling ability is the result of many professional experinces.