Cara menggunakan mongodb sum fields

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.

Cara menggunakan mongodb sum fields

MongoDB termasuk tipe Non-relational database dimana data disimpan dalam bentuk BSON document.

BSON adalah versi binary dari JSON.

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.

Cara menggunakan mongodb sum fields

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.

Cara menggunakan mongodb sum fields

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.

Cara menggunakan mongodb sum fields

Data baru dapat ditambahkan ke dalam collection dalam format yang tidak beraturan/terstruktur dan tidak harus sama dengan data yang sudah ada.

Cara menggunakan mongodb sum fields

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.

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

Copy

1$ wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -

2. Tambahkan Sourceslist

Ubuntu 20.0

Copy

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

Copy

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

4. Install MongoDB

Copy

1$ sudo apt-get install -y mongodb-org

5. Start MongoDB

Copy

1$ sudo systemctl start mongod

6. Periksa jika MongoDB server berjalan dengan baik

Copy

1$ sudo systemctl start mongod

Untuk dapat berinteraksi dengan MongoDB server kita bisa gunakan MongoDB shell.

Buka terminal dan eksekusi perintah berikut:

Operasi dasar pada MongoDB mirip dengan operasi dasar pada SQL database pada umumnya.

Database

Membuat database

Perintah:

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:

Pilih database yang ingin dihapus kemudian eksekusi perintah db.dropDatabase() untuk menghapusnya.

Collection

Membuat collection baru

Method:

Copy

1db.createCollection(name, options)

options disini adalah parameter yang bisa kita tambahkan dalam membuat sebuah collection dan bersifat optional.

Copy

1db.createCollection( ,

7 storageEngine: ,

9 validationLevel: ,

10 validationAction: ,

11 indexOptionDefaults: ,

15 writeConcern:

Penjelasan dari setiap parameter bisa dilihat disini

Contoh:

Cara menggunakan mongodb sum fields

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:

Contoh:

Cara menggunakan mongodb sum fields

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():

Cara menggunakan mongodb sum fields

Cara menggunakan mongodb sum fields

Contoh db.collection.insertMany():

Cara menggunakan mongodb sum fields

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.

Cara menggunakan mongodb sum fields

Menampilkan dengan filter.

Cara menggunakan mongodb sum fields

Cara menggunakan mongodb sum fields

Perbandingan dengan MySQL

  • Bentuk document bisa tidak beraturan

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():

Cara menggunakan mongodb sum fields

Cara menggunakan mongodb sum fields

Delete

Menghapus document.

Ada 2 Method:

  • db.collection.deleteOne(filter), hapus satu document
  • db.collection.deleteMany(filter), hapus banyak document sekaligus sesuai filter

Cara menggunakan mongodb sum fields

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:

Copy

1db.dinoProfile.aggregate([

3 { $group: { _id: "$dinoId", total: { $sum: "$height" } } }

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.