Cara menggunakan mongodb updatemany operators

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 updatemany operators

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.

Cara menggunakan mongodb updatemany operators

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 updatemany operators

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 updatemany operators

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 updatemany operators

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

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:

Operasi Dasar MongoDB

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:

1use DATABASE_NAME

2db.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>,

13 pipeline: <pipeline>,

14 collation: <document>,

15 writeConcern: <document>

16 }

17)

Penjelasan dari setiap parameter bisa dilihat disini

Contoh:

Cara menggunakan mongodb updatemany operators

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 updatemany operators

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

Cara menggunakan mongodb updatemany operators

Cara menggunakan mongodb updatemany operators

Contoh db.collection.insertMany():

Cara menggunakan mongodb updatemany operators

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 updatemany operators

Menampilkan dengan filter.

Cara menggunakan mongodb updatemany operators

Cara menggunakan mongodb updatemany operators

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

Cara menggunakan mongodb updatemany operators

Cara menggunakan mongodb updatemany operators

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 updatemany operators

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.