Terakhir diperbaharui: Mar 2, 2021
MongoDB
Jika MySQL adalah yang paling populer di dunia Relational Database, maka di dunia Non-relational Database ada MongoDB.
Hasil survey Stack Overflow tahun 2020 untuk kategori Most Popular Database.
MongoDB termasuk tipe Non-relational database dimana data disimpan dalam bentuk BSON document.
BSON adalah versi binary dari JSON.
NoSQL vs SQL
Sebelum kita lanjutkan kita perlu membahas beberapa perbedaan penting antara NoSQL dengan SQL dengan membandingkan MySQL dengan MongoDB.
Developer yang sudah terbiasa dengan konsep SQL database mungkin akan berusaha menerapkan konsep SQL ketika menggunakan NoSQL database.
Padahal konsep keduanya bisa dibilang sangat berbeda.
Bentuk data
MySQL
Pada MySQL sebuah database adalah gabungan dari satu atau banyak table.
Data harus disimpan dalam bentuk table, sebagai contoh kita memiliki table bernama dino berisikan profil dari setiap dinosaurus.
Jika kita menambah data dinosaurus baru maka kita harus menyesuaikan format data tersebut dengan kolom yang tersedia. Jika sebagian data kosong maka value dari kolom tersebut adalah null.
MongoDB
Sebuah database pada MongoDB adalah kumpulan dari satu atau banyak collections.
Collection mirip dengan table SQL.
Sebagai contoh, kita memiliki sebuah collection yang berisikan data yang sama dengan table dino di atas.
Data baru dapat ditambahkan ke dalam collection dalam format yang tidak beraturan/terstruktur dan tidak harus sama dengan data yang sudah ada.
Read Operation
MySQL
Operasi membaca data atau Read Operation pada database MySQL bisa dibilang operasi yang cukup murah dan mudah (resource yang digunakan tidak terlalu besar), hal ini dikarenakan sejak dari awal data harus dinormalisasi terlebih dahulu sebelum ditambahkan ke database.
Yang dimaksud normalisasi adalah mengatur kolom pada tabel agar tidak terjadi data redundancy (duplikat data terjadi tanpa ada tujuan).
Operasi Read pada MySQL bisa menjadi ‘mahal’ jika harus melakukan operasi join banyak tabel. Meskipun dengan menerapkan beberapa teknik optimasi hal ini bisa dihindari.
MongoDB
Kebalikan dari MySQL, operasi Read pada MongoDB bisa jadi mahal karena bentuk data yang ditambahkan bisa jadi tidak beraturan dari awal.
Untuk mendesain model data untuk NoSQL database kita fokus pada query pattern dan bentuk data yang ingin didapatkan. Hal ini berbeda dengan MySQL dimana kita fokus kepada struktur dan normalisasi data.
Kita bisa menggunakan kata kunci berikut untuk mempermudah kita dalam mendesain model data pada database.
Untuk SQL database, Dalam bentuk seperti apa data akan disimpan?.
Untuk NoSQL database, Dalam bentuk seperti apa data akan dibaca?.
Duplikasi data pada NoSQL adalah sesuatu yang normal.
Scalability
Meningkatkan skalabilitas dari SQL database lebih mudah dilakukan secara vertical, yang berarti peningkatan kemampuan dari SQL database dilakukan dengan cara meningkatkan spesifikasi mesin/server/komputer.
Sedangkan skalabilitas dari NoSQL database lebih mudah dilakukan secara horizontal, meningkatkan kemampuan dari NoSQL database dapat dilakukan dengan cara menambah jumlah dari mesin/server/komputer.
Pada prakteknya kita akan menemukan banyak aplikasi menggunakan kombinasi antara SQL dan NoSQL database. Karena dengan begitu kita bisa mengumpulkan kelebihan dari masing-masing database.
Selanjutnya kita akan bahas instalasi MongoDB dan Operasi Dasar MongoDB.
Install
Langkah instalasi berikut ini adalah untuk OS Linux berbasis debian(Ubuntu, Mint), untuk OS Windows silahkan download installernya disini.
1. Import public key
Jalankan perintah berikut ini dari terminal
1$ wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
2. Tambahkan Sourceslist
Ubuntu 20.0
1$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
Ubuntu 18.04
1echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
3. Update package list
1$ sudo apt-get update
4. Install MongoDB
1$ sudo apt-get install -y mongodb-org
5. Start MongoDB
1$ sudo systemctl start mongod
6. Periksa jika MongoDB server berjalan dengan baik
1$ sudo systemctl start mongod
Untuk dapat berinteraksi dengan MongoDB server kita bisa gunakan MongoDB shell.
Buka terminal dan eksekusi perintah berikut:
1$ mongo
Operasi Dasar MongoDB
Operasi dasar pada MongoDB mirip dengan operasi dasar pada SQL database pada umumnya.
Database
Membuat database
Perintah:
1use DATABASE_NAME
Perintah di atas akan membuat sebuah database baru jika tidak ditemukan database dengan nama yang sama di server.
Jika sudah ada database dengan nama yang sama, maka perintah tersebut akan menampilkan database yang sudah ada.
Menghapus database
Method:
1use DATABASE_NAME2db.dropDatabase()
Pilih database yang ingin dihapus kemudian eksekusi perintah db.dropDatabase() untuk menghapusnya.
Collection
Membuat collection baru
Method:
1db.createCollection(name, options)
options disini adalah parameter yang bisa kita tambahkan dalam membuat sebuah collection dan bersifat optional.
1db.createCollection( <name>,2 {3 capped: <boolean>,4 autoIndexId: <boolean>,5 size: <number>,6 max: <number>,7 storageEngine: <document>,8 validator: <document>,9 validationLevel: <string>,10 validationAction: <string>,11 indexOptionDefaults: <document>,12 viewOn: <string>, // Added in MongoDB 3.413 pipeline: <pipeline>, // Added in MongoDB 3.414 collation: <document>, // Added in MongoDB 3.415 writeConcern: <document>16 }17)
Penjelasan dari setiap parameter bisa dilihat disini
Contoh:
Perbandingan dengan MySQL
- Table terdiri dari row & column, sedangkan collection terdiri dari field & value
- Tidak seperti MySQL dimana kita harus menentukan nama dari column dan tipe datanya, pada MongoDB kita tidak mendefinisikan setiap field dari collection. Nama dari collection saja sudah cukup
Menghapus collection
Method:
1db.DATABASE_NAME.drop()
Contoh:
CRUD (Create, Read, Update, Delete) Operation
Create
Menambahkan data(selanjutnya kita sebut document) ke dalam collection.
MongoDB menyediakan dua metode untuk menambahkan document, yaitu:
- db.collection.insertOne(document), untuk menambahkan document tunggal/single
- db.collection.insertMany(document), untuk menambahkan banyak document
Contoh db.collection.insertOne():
Contoh db.collection.insertMany():
Perbandingan dengan MySQL
- MongoDB secara otomatis akan membuat sebuah ObjectID untuk setiap document yang kita masukan untuk membedakan antara satu document dengan document yang lain. ObjectID ini mirip dengan primary key pada MySQL.
- Pada contoh db.collection.insertMany(), bentuk document satu dengan yang lain tidak harus sama dan bisa sangat berbeda.
Field pada document pertama adalah name & color, sedangkan document kedua adalah name, color dan height, hal ini tidak akan menambahkan field height ke document pertama.
Read
Untuk membaca document pada collection kita gunakan db.collection.find(filter).
Contoh:
Menampilkan semua document.
Menampilkan dengan filter.
Perbandingan dengan MySQL
- Bentuk document bisa tidak beraturan
Update
Mengubah document.
Ada 3 Method:
- db.collection.updateOne(filter, update), ubah satu document
- db.collection.updateMany(filter, update), ubah banyak document sekaligus sesuai filter
- db.collection.replaceOne(filter, update), ganti satu document dengan document yang baru sesuai filter
Contoh db.collection.updateOne():
Delete
Menghapus document.
Ada 2 Method:
- db.collection.deleteOne(filter), hapus satu document
- db.collection.deleteMany(filter), hapus banyak document sekaligus sesuai filter
Aggregation
Konsep join pada SQL database tidak akan kita temukan pada NoSQL database seperti MongoDB, karena pada asalnya NoSQL database tidak didesain untuk menyimpan data yang terstruktur.
Lalu bagaimana jika kita ingin query document dari beberapa collection dan ditampilkan dalam satu tampilan seperti pada MySQL ?
Seperti yang dijelaskan sebelumnya, jika kita menggunakan NoSQL database maka kita fokus pada access pattern dan bagaimana bentuk data yang ingin kita dapatkan/baca.
Dengan menggunakan access pattern kita bisa mendapatkan berbagai bentuk data hanya dengan query satu collection.
Dan sangat mungkin antara satu collection dengan collection yang lain tidak terdapat relasi, sehingga kita tidak memerlukan konsep seperti join pada sql database.
MongoDB memiliki konsep aggregation yang bisa digunakan sebagai pengganti join namun terbatas untuk document, bukan collection.
Aggregation adalah sebuah operasi dimana value dari berbagai document di kelompokan menjadi satu untuk selanjutnya diproses agar mendapatkan hasil yang diinginkan.
Tidak semua NoSQL database memiliki konsep aggregation, setiap NoSQL database memiliki pendekatannya masing-masing. Sebagai contoh DynamoDB tidak support aggregation, tetapi DynamoDB memiliki Global Secondary Index dan Local Secondary Index yang bisa dimanfaatkan sebagai ganti aggregation.
Contoh Aggregation pada MongoDB:
1db.dinoProfile.aggregate([2 { $match: { color: "red" } },3 { $group: { _id: "$dinoId", total: { $sum: "$height" } } }4])
Penjelasan:
Stage 1 : cari semua dino pada collection dinoProfile yang memiliki warna merah dengan operator $match.
Stage 2: kumpulkan hasil pencarian dalam satu grup sesuai field dinoId menggunakan operator $group untuk kemudian dihitung total tinggi dari dino menggunakan operator $sum.