Cara menggunakan mongodb search all collections

Halo semua Kiddy disini, dan pada kesempatan kali ini gue mau berbagi insight mengenai Mongo DB yang berlatar belakang NoSQL. Bisa dibilang gue agak ketinggalan sih berbagi insight mengenai Mongo DB karena ini teknologi database udah lama dipake sebenernya. Gue sendiri pun belom sepenuhnya menggunakan MongoDB, cuma pernah ngulik diawal 2016 saat semester 2 perkuliahan tapi karena masih bego saat itu jadi ngga paham kenapa harus pake NoSQL dibandingkan RDBMS (MySQL)? Akhirnya yaudah cuma asal nyoba dan paham apa gunanya NoSQL tanpa mendalami.

Tapi akhir-akhir ini gue ngerasa udah cukup sucks pake RDBMS dan pengen ngejajal move sepenuhnya ke DOB (Document-oriented Database).

Tapi perlu teman-teman ketahui ya kita tidak boleh mendewakan sebuah teknologi, tentu saja ada kelemahannya dan tidak boleh merasa spesial (Pride, salah satu dosa dari tujuh dosa dalam programming).

Kenapa gue mau pindah ke NoSQL?

Anti Struktur

Saking gampangnya NoSQL dimodify, kita ngga perlu ribet lagi tuh mikirin column apa yang harus ditambahkan kedalam database kita, which is kita ngga perlu ribet-ribet lagi buat migration karena NoSQL bersifat dinamis dan bisa ngikutin apa yang kita butuhkan, but kita harus perhatikan kita juga perlu mikirin untuk mongo perlu di index ngga sih? Yaudah ntar aja kita bahas.

Cocok untuk Horizontal Scaling

src: https://www.intouchdata.com/

Horizontal scaling adalah memecah server menjadi beberapa server ketimbang mengupgrade sebuah server menjadi lebih raksasa, gampangnya ya dijadikan microservice lah~

Dengan menggunakan NoSQL, membuat Horizontal scaling semakin mudah karena emang NoSQL didesain untuk diskala melalui data center yang bersifat multiple. (https://medium.com/swlh/should-you-use-nosql-or-sql-db-or-both-349cb26c9add)

Tanpa Model

Kalo dengan RDBMS kita harus ribet-ribet kita perlu setting model, kita hanya perlu membuat schema saja pada NoSQL. Tentunya kita juga ngga akan ribet sama yang namanya migration hehehe.

Nah setelah tau kelebihan NoSQL sekarang saatnya kita coba untuk ngulik NoSQL itu sendiri dengan MongoDB. Disini saya menggunakan Laradock karena males install lagi MongoDBnya hehehe.

Untuk Linux silahkan install dibawah ini:

Install MongoDB on Linux - JournalDev

Sometime back I wrote a post on how to install MongoDB on Mac OS X. However most of the development usually happens on…

www.journaldev.com

Untuk Windows silahkan install dibawah ini:

How to Download & Install MongoDB on Windows

The installers for MongoDB are available in both the 32-bit and 64-bit format. The 32-bit installers are good for…

www.guru99.com

Untuk Mac OS silahkan install dibawah ini:

How To Install MongoDB On Mac Operating System | Edureka

In our previous article we talked about how you can install MongoDB architecture on your Windows operating system. In…

www.edureka.co

Laradock User Guide

Untuk pengguna Laradock, pertama pastiin dulu kalian enable mongo di .env kalian:

WORKSPACE_INSTALL_MONGO=true

Untuk yang menggunakan laradock jangan lupa dibuild dulu ya:

sudo docker-compose up -d mongo

Setelah itu masuk ke workspacenya mongo:

sudo docker-compose exec mongo bash

Silahkan ketik “mongo” lalu enter.

Oke kita dah siap untuk menggunakan MongoDB.

Kicking your ass with the MongoDB

Nah kita akan bermain dengan studi kasus Todo List seperti biasa.

Silahkan buat database baru dengan cara mudah:

use (namadb);

example:

use todolist;

Gampang banget kan? Emangg~

Oke Sekarang kita perlu ngebuat table user kita as usually.

Jadi table di MongoDB diberi nama collections, tapi kita juga bisa show table kok. Caranya adalah

show tables

Pasti kosong karena kita belum buat hahaha. Yuk kita buat table Users dulu dengan cara langsung aja isi collectionnya.

Rumus:

db.(collection).insert({query})//ataudb.(collection).save({query})

Syntax:

db.users.insert({name: "Kiddy", username: "kiddy", password: "123456"})

Sekarang kita tambahkan lagi data baru, karena kita mau coba untuk menggunakan fungsi WHERE seperti di MySQL.

db.users.insert({name: "Hudya", username: "hudya", password: "123456"})

Menampilkan data

Gampang banget cara menampilkan data di MongoDB, literally kalian tinggal tulis seperti syntax dibawah ini:

> db.users.find(){ "_id" : ObjectId("5e6c991a37c2b7308ab4a6ad"), "name" : "Kiddy", "username" : "kiddy", "password" : "123456" }
{ "_id" : ObjectId("5e6c99dc37c2b7308ab4a6ae"), "name" : "Hudya", "username" : "hudya", "password" : "123456" }

Nah muncul semuanya kan? Ini adalah cara untuk menampilkan data tanpa condition, tapi kalo mau pake condition caranya cukup mudah.

sudo docker-compose up -d mongo
0

Contoh:

sudo docker-compose up -d mongo
1

Yeay, we found the Hudya data.

Kalo multiple condition gimana? Chill tinggal gini aja.

sudo docker-compose up -d mongo
1

Mungkin ada yang bertanya _id dan ObjectId tuh apaan?

_id itu adalah kolom id pada RDBMS, bisa diganti ngga bang? Ya ini udah bawaan template cuy, kalo mau ya nambahin aja kolom “id”, ya tapi ngapain ditambahin kalo udah ada kan? Jangan ribet-ribet wkwkwk.

Sedangkan ObjectId adalah:

An ObjectId is a 12 byte binary BSON type that contain any 12 bytes you want.

Yang kalo diartiin ini sebenernya tipe biner 12 byte dari BSON yang bisa berisi 12 byte apa aja yang kita mau.

Bisa ngga bang kalo saya langsung isi _id-nya?

Bisa banget, nih buktinya:

sudo docker-compose up -d mongo
3

Bisa ngga bang kalo saya isi pake UUID?

Kita coba aja deh daripada saya dibilang omdo:

sudo docker-compose up -d mongo
4

Gimana cara search pake id bang kalo misalnya pake bawaan ObjectId?

sudo docker-compose up -d mongo
5

Gampil kan? Tapi saya prefer pake UUID sih kenapa? Gampang karena String hehehe. Kalo di Golang, ribet tuh parsing dari BSONnya (pengalaman, apa emang sayanya aja masih bego ya? xixixi ya maklum ak masih anak piyik 🐣).

Okey udah basa-basinya, sekarang kita lanjut ke table todonya.

Insert ke table todo, disini saya akan menggunakan ID UUID si Budi.

sudo docker-compose up -d mongo
6

Pake stylenya Laravel ya ada created_at sama updated_at ahahaha.

Nah kalo saya coba untuk select datanya akan muncul sebagai berikut.

sudo docker-compose up -d mongo
7

Silahkan masukan satu data lagi.

sudo docker-compose up -d mongo
8

Hasilnya:

sudo docker-compose up -d mongo
9

Nah sekarang kita akan coba mengupdate data, perbedaannya mengupdate data pada table todo.

sudo docker-compose exec mongo bash
0

Apa ekspektasi kalian? Apakah hanya titlenya saja yang berubah?

Realita:

sudo docker-compose exec mongo bash
1

Terdapat perbedaan antara NoSQL dan MySQL (RDBMS), apabila kita menggunakan fungsi update dan tidak memasukkan semua kolom yang kita ingin rubah maka hasilnya semua akan digantikan dengan data yang kita update saja. Huft, kalo gini berarti NoSQL jelek dong? Ups tunggu dulu, ada caranya gan.

Sekarang kita coba menambahkan aggregate $set kedalam fungsi update. Biar kita ubah bagian titlenya saja.

sudo docker-compose exec mongo bash
2

Hasilnya adalah sebagai berikut:

sudo docker-compose exec mongo bash
3

Nah hanya titlenya saja yang berubah kan pada value kedua? Itulah fungsi aggregate $set, mengubah yang kita ingin ubah saja columnya tanpa mengubah keseluruhan value.

Nah karena “_id” : ObjectId(“5e6c9d34c9396116d82961cc”) cukup menyampah, kita hapus saja ya.

sudo docker-compose exec mongo bash
4

Apabila kita coba temukan:

sudo docker-compose exec mongo bash
5

Oke CRUD udah selesai nih, tapi masih ada yang kurang, sekiranya apa ya?
Kita punya dua table, users dan todo, dan todo memiliki user_id, pertanyaan logisnya adalah, gimana caranya kita melakukan JOIN dari todo ke users ya? Biar kita bisa tau informasi siapa user yang menulis todo list tersebut.

Sempet jadi pertentangan awal NoSQL rilis karena belum ada fitur join, namun sejak MongoDB versi 3.2 kita bisa melakukan fungsi aggregate $lookup yang fungsinya sama seperti Left Join pada RDBMS. Cakep banget kan?

Tapi sebelumnya kita tambahin dulu yuk beberapa data todolist untuk budi, Hudya dan Kiddy.

Disini kita akan menggunakan bulk insert, apaan tuh? Sama aja kaya mass insert atau intinya insert sekaligus banyak. Caranya cukup mudah, didalam query insert kita ganti dengan array terlebih dahulu.

sudo docker-compose exec mongo bash
6

Nah apabila muncul BulkWriteResult bagian nInsertednya 6, maka berhasil dan kita bisa cek data kita banyak ngga.

sudo docker-compose exec mongo bash
7

Wah banyak nih, cakep buat ngetes Lookup alias JOIN. Sekarang kita coba fungsi Lookupnya. Kita akan menggunakan fungsi syntax aggregate, bukan find lagi. Dokumen lengkapnya ada disini.

Sok kita coba.

sudo docker-compose exec mongo bash
8

Sekarang kita bisa liat ada array users didalam todo kita. Nah array users ini berisi data dari siapa si pembuat todo tersebut.

Mungkin sekarang agan bertanya lagi, gimana cara supaya nemuin Todo dari sebuah user aja? Oh gampil, kita tinggal tambahkan fungsi $match pada pipeline di aggregate kita.

Misalnya disini saya cuma mau nampiln Todo yang user_idnya si Hudya saja.

sudo docker-compose exec mongo bash
9

Mantep kan? Gimana? Gampang ngga NoSQL? Harusnya sih bagi yang sudah terbiasa dengan JSON dan kebiasaan menulis query-query di MySQL akan cepat paham, tinggal gimana kita ngebiasaainnya aja hehehe. Kedepannya saya juga akan mulai bikin Database pake NoSQL, so staytune!

Apa isi dari sebuah Collection dalam MongoDB?

Collection MongoDb adalah tempat kumpulan informasi data yang berbentuk dokumen. Collection dipadankan seperti tabel-tabel yang berisi data pada database SQL. Document MongoDb adalah satuan unit terkecil dalam MongoDB.

Apa itu query MongoDB?

MongoDB merupakan sistem penyimpanan data berbasis dokumen yang menyimpan informasi dalam bentuk yang lebih tidak terstruktur dibanding sistem berbasis SQL. Artinya, data yang disimpan dalam MongoDB tidak memiliki schema.

Apa itu Mongoose JS?

Mongoose adalah sebuah framework JavaScript yang umumnya digunakan pada aplikasi Node.js dengan database MongoDB.

Kenapa harus menggunakan MongoDB?

MongoDB mampu menampung lebih banyak data kompleks karena menggunakan schema table yang dinamis (dynamic schema). Dengan skema data tersebut, database ini bisa menyimpan data yang lebih bervariasi, mulai dari data terstruktur hingga tidak terstruktur.