ID (Indonesia) Translation

Node.js - MongoDB Join: Menajikan Agregasi Data

Hai teman, super bintang coding masa depan! ? Selamat datang ke perjalanan menarik kami ke dunia Node.js dan MongoDB joins. Saya sangat senang menjadi panduanmu saat kita eksplorasi topik yang menarik ini bersama. Sebagai orang yang telah mengajar ilmu komputer selama tahun tahun, saya bisa menjamin bahwa meskipun ini mungkin terlihat menakutkan pada awalnya, kita akan memecahnya menjadi bagian-bagian kecil yang bahkan pemula sepenuhnya dapat memahami. Jadi, ambil minumannya yang favoritmu, duduk nyaman, dan mari kita masuk ke dalam!

Node.js - MongoDB Join

Memahami Dasar-Dasar: Apa Itu Join?

Sebelum kita melompat ke rincian MongoDB joins, mari kitaambil waktu untuk memahami apa sebenarnya "join" itu. Bayangkan Anda mengatur sebuah pesta besar (siapa yang tidak menyukai pesta yang bagus, kan?). Anda memiliki dua daftar:

  1. Daftar tamu dan warna favorit mereka
  2. Daftar hadiah pesta dan warnanya

Sekarang, Anda ingin mencocokkan setiap tamu dengan hadiah pesta yang cocok dengan warna favorit mereka. Itu adalah esensi dari apa yang join lakukan dalam istilah basis data - menggabungkan data dari dua atau lebih koleksi berdasarkan field yang berkaitan antaranya.

MongoDB dan Joins: Hubungan Khusus

Sekarang, mari kita lihat hal yang menarik. MongoDB, sebagai basis data NoSQL, tidak memiliki operasi "JOIN" bawaan seperti basis data SQL tradisional. Tetapi jangan khawatir! MongoDB memiliki kekuatan super sendiri, dan salah satunya adalah fungsi $aggregate().

Fungsi $aggregate(): Teman Baru Anda

Fungsi $aggregate() di MongoDB seperti sebuah pisau Swiss Army untuk manipulasi data. Itu memungkinkan kita untuk memproses dan transformasi data dalam cara yang kuat, termasuk melakukan operasi join-like.

Bagaimana $aggregate() Bekerja

Fungsi $aggregate() bekerja dengan mengirimkan dokumen melalui pipa dari berbagai tahap. Setiap tahap mengubah dokumen saat mereka melewati. Itu seperti sebuah konveyor di pabrik, di mana setiap stasiun menambahkan atau memodifikasi sesuatu tentang produk.

Berikut adalah tabel dari beberapa tahap $aggregate() umum yang kita akan gunakan:

Tahap Deskripsi
$match Memfilter dokumen untuk hanya melewati yang cocok dengan kondisi yang ditentukan
$project Mengubah bentuk dokumen dengan menambahkan, menghapus, atau menghitung field baru
$lookup Melakukan join left outer dengan koleksi lain
$unwind Menghancurkan field array dari dokumen masukan
$group Mengelompokkan dokumen berdasarkan ekspresi yang ditentukan

Mari Koding: Contoh Praktis

Sekarang kita sudah memahami teorinya, mari kita praktikkan dengan beberapa kode nyata. Kita akan membuat sebuah skenario sederhana di mana kita memiliki dua koleksi: students dan courses.

Langkah 1: Menyiapkan Lingkungan

Pertama-tama, mari kita siapkan lingkungan Node.js dan menghubungkan ke MongoDB:

const MongoClient = require('mongodb').MongoClient;
const url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
if (err) throw err;
const dbo = db.db("school");

// Kode agregasimu akan berada disini

db.close();
});

Dalam kode ini, kita menghubungkan ke basis data MongoDB yang dinamai "school". Jangan khawatir jika Anda tidak mengerti setiap baris - hal penting adalah kita sedang mengatur koneksi ke basis data.

Langkah 2: Membuat Koleksi

Mari kita isi basis data kita dengan beberapa data contoh:

// Koleksi Students
dbo.collection("students").insertMany([
{ _id: 1, name: "Alice", course_id: 101 },
{ _id: 2, name: "Bob", course_id: 102 },
{ _id: 3, name: "Charlie", course_id: 101 }
], function(err, res) {
if (err) throw err;
console.log("Students inserted");
});

// Koleksi Courses
dbo.collection("courses").insertMany([
{ _id: 101, name: "Web Development", instructor: "Mr. Smith" },
{ _id: 102, name: "Database Design", instructor: "Mrs. Jones" }
], function(err, res) {
if (err) throw err;
console.log("Courses inserted");
});

Di sini, kita membuat dua koleksi: students dan courses. Setiap murid memiliki course_id yang sesuai dengan _id kursus.

Langkah 3: Melakukan Join

Sekarang, mari kita gunakan fungsi $aggregate() untuk menggabungkan koleksi ini:

dbo.collection("students").aggregate([
{
$lookup:
{
from: "courses",
localField: "course_id",
foreignField: "_id",
as: "course_info"
}
},
{
$unwind: "$course_info"
},
{
$project: {
_id: 1,
name: 1,
course_name: "$course_info.name",
instructor: "$course_info.instructor"
}
}
]).toArray(function(err, result) {
if (err) throw err;
console.log(JSON.stringify(result, null, 2));
db.close();
});

mari kitauraikan ini langkah demi langkah:

  1. Kita mulai dengan koleksi students.
  2. Tahap $lookup menggabungkan koleksi courses dengan koleksi students, mencocokkan course_id di students dengan _id di courses.
  3. Tahap $unwind meratakan array hasil dari $lookup.
  4. Tahap $project mengubah bentuk output kita, memilih field mana yang ingin kita sisakan.

Hasilnya akan tampak seperti ini:

[
{
"_id": 1,
"name": "Alice",
"course_name": "Web Development",
"instructor": "Mr. Smith"
},
{
"_id": 2,
"name": "Bob",
"course_name": "Database Design",
"instructor": "Mrs. Jones"
},
{
"_id": 3,
"name": "Charlie",
"course_name": "Web Development",
"instructor": "Mr. Smith"
}
]

Voila! Kita telah berhasil menggabungkan koleksi students dan courses, memberikan kita gambaran lengkap tentang informasi kursus setiap murid.

Penutup

Dan begitulah, teman-teman! Kita telah melakukan perjalanan melalui negeri MongoDB joins menggunakan fungsi $aggregate() yang kuat. Kita telah melihat bagaimana menghubungkan koleksi, memanipulasi data, dan menciptakan hasil yang berarti.

Ingat, seperti belajar keterampilan baru, menguasai MongoDB joins memerlukan latihan. Jangan frustasi jika itu belum berjalan segera - bahkan pengembang yang paling berpengalaman pernah menjadi pemula. Terus mencoba, cobalah menggabungkan koleksi lain, dan yang terpenting, nikmati prosesnya!

Saat kita menutup, saya diingatkan oleh kutipan yang terkenal oleh ilmuwan komputer terkenal Grace Hopper: "Kata yang paling merusak di dalam bahasa adalah 'Kami selalu melakukan seperti itu sebelumnya.'" Jadi, majulah, eksperimen, dan temukan cara baru untuk menggabungkan dan menganalisis data Anda!

Selamat koding, dan sampai jumpa lagi, semoga kueri Anda cepat dan data Anda bersih! ??

Credits: Image by storyset