Mongoose

Seperti dikatakan sebelumnya untuk memudahkan pemodelan data di MongoDB anda bisa memakai pustaka Mongoose. Meskipun sebenarnya Mongoose memakai objek JavaScript biasa dan mendukung banyak metode query data tetapi yang paling membedakan adalah Mongoose mendukung schema type dan validasi di level schema.

data:{type: schemaType}

Schema Type

Ada beberapa schema type yang didukung oleh pustaka ini yaitu

  • String
  • Number
  • Date
  • Boolean
  • Buffer (untuk data binary misalnya gambar, mp3 dll.)
  • Mixed (data dengan tipe apa saja)
  • Array
  • ObjectId

Pemodelan Data

Lalu bagaimana Mongoose memodel data? ambil contoh misalnya dalam pengembangan aplikasi, data yang akan dipakai seperti berikut

var lokasiWisataKotaBatu = [{
  nama: 'Batu Night Square',
  alamat: 'Jl. Oro oro ombo 13, Tlekung'
  rating: 3,
  fasilitas: ['Wahana bermain','Roller coaster', 'Taman lampion']
}]

Dari data diatas dengan memakai Mongoose sangat mudah untuk diterjemahkan ke skema dan tipe data untuk tiap field

var lokasiWisataKotaBatuSchema = new mongoose.schema({
  nama: String,
  alamat: String,
  rating: Number,
  fasilitas: [String]
})

Bagaimana dengan validasi data?. Jika anda lihat field data rating diatas dan umumnya mempunyai nilai antara 0 - 5 dan jika secara default diberi nilai 0 maka skema rating akan menjadi

rating: {type: Number, 'default': 0}

Anda juga bisa memakai key required untuk menandakan bahwa field data tersebut bersifat wajib ada misalnya

nama: {type: String, required: true} 

Untuk lebih jelasnya silahakan lihat dokumentasi dari Validators Mongoose.

Aplikasi node.js dengan database MongoDB yang memakai pustaka Mongoose dapat dikatakan mempunyai hubungan relasi satu-satu artinya dengan memakai model Mongoose berarti secara langsung aplikasi akan memakai data pada MongoDB.

Kalau misalnya anda bekerja dengan database relasional MySQL maka anda akan memakai bahasa SQL seperti INSERT INTO table VALUES (field1=data) untuk memasukkan data sedangkan seperti anda ketahui jika dengan database NoSQL untuk menyimpan model object cukup dengan memakai metode misalnya model.save(). Dalam Mongoose untuk memakai model yang telah mempunyai schema seperti diatas

var LokasiModel = mongoose.model('Lokasi', lokasiWisataKotaBatuSchema, 'lokasiWisataBatu')

Kode diatas memberi arti bahwa aplikasi akan memakai model Lokasi dengan schema type yang telah di definisikan sebelumnya yaitu lokasiWisataKotaBatuSchema dan model ini akan di simpan pada koleksi data di MongoDB dengan nama koleksi adalah lokasiWisataBatu.

Untuk memakai model Lokasi caranya adalah dengan menciptakan instance dari model tersebut

var lokasiModel = new LokasiModel()
lokasiModel.nama = 'Museum Angkut'
lokasiModel.alamat = 'Jl. Kembar 11'
lokasiModel.rating = 5
lokasiModel.fasilitas = ['Restoran', 'Parkir luas']

Kemudian untuk menyimpan data tersebut ke dalam database MongoDB

lokasiModel.save(function(err){
  if(!err) console.log('Data Disimpan!')
})

Cukup mudah bukan dan memang pustaka ini bertujuan untuk memudahkan developer dalam pemodelan data terutama jika data yang akan dimodel mempunyai struktur yang rumit misalnya nested document. Untuk lebih lengkapnya silahkan anda mengunjungi situs resmi mongoosejs.com.

Projek

Bagi anda yang sudah mengerti gambaran umum dari pustaka Mongoose ini silahkan mengutak atik contoh projek sederhana yang memakai framework ExpressJS dan Mongoose, Person REST API.