Belajar Mongodb |
Lanjut dari pembahasan sebelumnya disini kita akan mencoba praktek basic collection method dari nosql mongodb, setelah sebelumnya kita praktek membuat crud sederhana dengan collection method find(), insert(), remove(), update(), kita lanjut dengan grouping dan join, sebenarnya nosql itu tidak disesain untuk kebutuhan relational seperti join tapi mongodb menyediakan case jika kita mendadak membutuhkan join, istilah join di mongodb disebut lookup atau $lookup.
Di pembahasan kali ini kita akan mencoba praktek dan membahas sedikit materi nya, di dalam pengolahan data grouping sangat di perlukan baik itu untuk kebutuhan report ataupun kebutuhan lainnya, bisa di bayangkan jika di dalam sql tidak ada yang namanya grouping kita query satu-satu menggunakan kondisi where wkwkwk, okay kita skip dulu aja langsung ke praktek berikut daftar isi dari pembahan kita kali ini.
Praktek Grouping Data
Di dalam ruang lingkup database (basis data) grouping data sangat di perlukan untuk kebutuhan report biasanya, baik itu berupa aggregate angka atau mengelompokan data berdasarkan kolom yang di ingin kan misalkan. Kita ingin mengelompokan data buku berdasarkan tanggal terbit di sinilah fungsi grouping data di perlukan, mari kita coba praktet dengan menggunakan schema sebelumnya yang sudah kita buat di part 1 langsung saja kita praktek, buat collection baru dengan nama books , seperti biasa untuk GUI kita menggunakan aplikasi nosqlbooster jika teman-teman belum menginstallnya dan lupa cara untuk membuat collections nya bisa baca tutorial pertama nya https://koboykampussukabumi.blogspot.com/2020/11/latihan-mongodb-part-1-crud-dan-operator.html untuk collection books setelah kita membuat nya lalu kita masukan data dummy sebagai berikut
db.books.insert([
{
'name':'buku 1',
'id_kategori':'',
'tahun_terbit': 2010,
'penulis': 'tes'
},{
'name':'buku 2',
'id_kategori':'',
'tahun_terbit': 2010,
'penulis': 'tes'
},{
'name':'buku 3',
'id_kategori':'',
'tahun_terbit': 2020,
'penulis': 'tes 1'
},{
'name':'buku 4',
'id_kategori':'',
'tahun_terbit': 2020,
'penulis': 'tes 1'
}
])
Mungkin kita akan mencoba beberapa skenario untuk praktek nya diantaranya sebagai berikut
- grouping data biasa
- grouping data dengan output custom menggunakan $project
- grouping data dan menghitung jumlahnya
- grouping data dengan kondisi
Kita coba dengan skenario pertama berikut kode nya
db.books.aggregate([
{
// $group perintah untuk grouping
$group: {
// _id ini wajib ada sedangkan setelah : itu nama kolom yang akan kita grouping
_id: '$tahun_terbit'
}
}
])
Result nya akan seperti ini
Skenario kedua grouping dengan custom result
db.books.aggregate([
{
// $group perintah untuk grouping
$group: {
// _id ini wajib ada sedangkan setelah : itu nama kolom yang akan kita grouping
_id: '$tahun_terbit'
}
},{
// custom output untuk ditampilkan nanti berupa json
$project: {
// key dan value harus menggunakan $ awalnya
tahun:"$_id"
}
}
])
Result nya akan seperti ini
Skenario ketiga grouping dan menghitung jumlah data yang di grup
db.books.aggregate([
{
// $group perintah untuk grouping
$group: {
// _id ini wajib ada sedangkan setelah : itu nama kolom yang akan kita grouping
_id: '$tahun_terbit',
// untuk perhitungan menggunakan $sum
total: { "$sum": 1 }
}
},{
// custom output untuk ditampilkan nanti berupa json
$project: {
// key dan value harus menggunakan $ awalnya
tahun:"$_id",
total:"$total"
}
}
])
Result nya akan seperti ini
Skenario ke empat grouping dengan menggunakan kondisi
db.books.aggregate([
// menggunakan $match untuk mencari berdasarkan kondisi kolom tertentu
{ $match : {
// kolom dan value
penulis: "tes"
}},
{
// $group perintah untuk grouping
$group: {
// _id ini wajib ada sedangkan setelah : itu nama kolom yang akan kita grouping
_id: '$tahun_terbit',
total: { "$sum": 1 }
}
},{
// custom output untuk ditampilkan nanti berupa json
$project: {
// key dan value harus menggunakan $ awalnya
tahun:"$_id",
total:"$total"
}
}
])
Result nya akan seperti ini
Sofar mungkin itu adalah praktek sederhana nya, teman-teman bisa membuka dokumentasi lengkapnya di situs resminya https://docs.mongodb.com/manual/reference/operator/aggregation/group/ disitu sudah lengkap dengan berbagai operator nya disini kita baru mempraktekan dengan operator $match untuk pengkondisian atau filter ketika akan menampilkan data dan juga $sum untuk menghitung jumlah data sesuai yang kita kelompokan.
Saran untuk teman-teman supaya bisa lebih paham lanjtukan dengan ber eksperimen membuat collection baru dan coba untuk grouping data lagi dan mencoba dengan operator lain yang ada di situs nya supaya mengasah kemapuan teman-teman untuk lebih ahli lagi.
Kenapa ada join di mongodb ?
Mungkin akan timbul pertanyaan seperti itu mongodb kan bukan relasional jadi tidak mungkin ada join, ini juga merupakan salah satu faktor yang menjadi kan mongodb populer di lingkup nosql karena ada fitur join layaknya relasional database. Dalam satu kasus penggunaan join ini sangat tidak disarankan karena ya balik lagi ke prinsip dasar jika datanya relasional berarti menggunakan database yang mendukung relasional jika data sudah di normalisasi kan semua ke dalam satu tabel atau collection nosql bisa menjadi pilihan.
Penggunaan join ini hanya di gunakan untuk kasus jika aplikasi udah jalan dan jadi sedangkan jika ada kasus untuk kebutuhan datanya perlu di pisah collection nya sehingga membutuhkan join disinilah baru peran join bisa digunakan di mongodb, atau mungkin bisa jug menggunakan multi database hehehe, jika dari awal desain kita sudah ok sangat tidak disaranakan sih untuk menggunakan join karena akan lemot dari segi perpormance nya. Gambaran query join di mongodb proses nya akan seperti pada gambar di bawah ini
Query join di mongodb |
Mungkin nanti akan timbul pertanyaan kenapa membuat tutorial nya jika tidak disarankan ?, nah jawaban nya yaitu untuk case jika sistem kita sudah besar dan nanti ada kasus butuh memisahkan collection satu dengan collection lain nya tapi saling berhubungan ini semua berdasarkan pengalaman pribadi sih hehehe. Tutorial ini hanya sebagai pembelajaran aja bagi kita supaya tepat dalam memilih, memecahkan masalah dalam kondisi tertentu di nosql mongodb.
Untuk dokumentasi lengkapnya ada disitus ini silahkan teman-teman pelajari dan baca-baca di situs resminya https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/index.html
Praktek join dengan menggunakan operator $lookup
Langkah pertama buat collection baru lagi dengan nama category dan buat data dummy nya seperti ini
db.category.insert([{
'name': 'teknologi',
}, {
'name': 'informasi',
}])
setelah kita punya collection baru dengan nama category schema tersebut nanti akan saling berelasi dengan schema books mari kita ubah salah satu data yang ada di schema books dengan memasukan ObjectId(_id) dari collection category ke books.
db.books.update({ _id: ObjectId("5fec273679670010168296cd") }, {
$set: {
"name": "buku 3",
"id_kategori": ObjectId("5ff2692af1d6de2fdc6aca7b"),
"tahun_terbit": 2020,
"penulis": "tes 1"
}
})
sebagai catatan perlu di ingat jika ingin membuat relasi menggunakan kolom _id tipe data nya wajib ObjectId jika tidak maka tidak akan bisa di relasi
Mari kita praktek berikut adalah contoh code nya untuk join di mongodb
db.books.aggregate([
{
$lookup:
{
from: 'category', // collection yang akan kita join
localField: 'id_kategori', // id category di simpan di kolom books
foreignField: '_id', // id di collection category
as: 'kategori' // alias result column
}
}
])
Sehingga resultnya akan menjadi seperti ini
result skenario pertama |
Mungkin akan timbul pertanyaan bagaimana supaya result nya saya hanya ingin nama kategori nya saja berikut adalah contoh dari skenario selanjutnya,
db.books.aggregate([
{
$lookup:
{
from: 'category',
localField: 'id_kategori',
foreignField: '_id',
as: 'kategori'
},
}, {
$project: {
"book_name": "$name",
"book_category_name": "$kategori.name"
}
}
])
result skenario kedua |
Hasil result dari skenario kita hanya mengambil beberapa kolom saja dan bsa mendefinisikan output yang akan kita kirim apa saja menggunakan $project mungkin akan timbul pertanyaan lagi saya ingin output dari kategorinya bukan berupa array, berikut adalah contoh code skenario terakhir
db.books.aggregate([
{
$lookup:
{
from: 'category',
localField: 'id_kategori',
foreignField: '_id',
as: 'kategori'
},
},
{ $unwind: "$kategori" }, {
$project: {
"book_name": "$name",
"book_category_name": "$kategori.name"
}
}
])
result skenario ketiga |
Yos sampain disini praktek join di mongodb sudah selesai mungkin segitu yang bisa saya sampaikan pada tulisan kali ini semoga bermanfaat bagi teman-teman, jika ada yang tidak mengerti, ada kesalahan dalam penulisan dan ada yang ingin ditanyakan atau di tambahkan bisa tulis dikolom komentar terimakasih.
3 Komentar
Online Casino Site: Online Casino & Slots UK | Choegocasino
BalasHapusPlay our fantastic range of online casino games including slots, blackjack, roulette and 메리트카지노총판 more with 카지노사이트 Choegocasino™. Enjoy our great selection of exciting games! 1xbet
terima kasih informasinya sangat berguna bagi saya!
BalasHapusDemo Slot Pragmatic
terima kasih informasinya sangat berguna bagi saya
BalasHapus