Pembenaman: Hubungan Satu-ke-Beberapa
Pelajar akan membenamkan subdokumen untuk data yang berkait rapat dan mengukur kelebihan prestasi bacaan apabila maklumat berkaitan ditempatkan bersama.
Pembenaman: Hubungan Satu-ke-Beberapa ialah pelajaran MongoDB Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran MongoDB Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus MongoDB Academy merangkumi sejumlah 4 pelajaran.
Apakah Pembenaman Dokumen?
Pembenaman bermaksud menyimpan data berkaitan terus di dalam dokumen induk dan bukannya dalam koleksi berasingan. Daripada memautkan dua koleksi dengan kunci asing, anda menyusun data berkaitan sebagai subdokumen atau tatasusunan subdokumen. Ini ialah alat reka bentuk MongoDB yang paling berkuasa kerana satu bacaan boleh mendapatkan induk dan semua data berkaitannya serentak.
Hubungan Satu kepada Beberapa
Hubungan satu kepada beberapa wujud apabila satu dokumen induk mempunyai sebilangan kecil item anak yang terhad—biasanya kurang daripada beberapa puluh. Contoh klasik termasuk catatan blog dan ulasannya, pengguna dan alamatnya, atau pesanan dan item barisnya. Apabila bilangan anak boleh dijangka dan kecil, pembenaman hampir sentiasa merupakan pilihan yang tepat.
Membenamkan Alamat Pengguna
Pertimbangkan koleksi users yang setiap penggunanya mempunyai satu atau dua alamat penghantaran. Daripada menggunakan koleksi addresses yang berasingan, benamkan alamat tersebut secara terus. Ini bermakna pencarian pengguna dan alamatnya memerlukan satu pertanyaan tanpa cantuman.
db.users.insertOne({
name: 'Alice',
email: 'alice@example.com',
addresses: [
{ label: 'home', street: '123 Maple St', city: 'Austin', zip: '78701' },
{ label: 'work', street: '456 Oak Ave', city: 'Austin', zip: '78702' }
]
});Membaca Data Terbenam dalam Satu Pertanyaan
Apabila data dibenamkan, anda mendapatkan dokumen induk dan semua anaknya dengan satu findOne. Tiada keperluan untuk $lookup atau perjalanan pergi balik kedua ke pangkalan data. Ini menjadikan bacaan lebih pantas dan kod aplikasi lebih mudah, kerana keseluruhan graf objek tiba dalam satu respons.
// Retrieve user AND their addresses in a single read
const user = await db.collection('users').findOne(
{ email: 'alice@example.com' },
{ projection: { name: 1, addresses: 1 } }
);
console.log(user.addresses); // Array of embedded address objectsMengemas Kini Subdokumen Terbenam
Untuk mengemas kini subdokumen terbenam, gunakan operator kedudukan $ atau tatatanda titik. Contohnya, menukar poskod alamat rumah Alice menyasarkan elemen tatasusunan tertentu yang sepadan dengan syarat penapis. Kemas kini terbenam berlaku secara atomik pada peringkat dokumen—tiada transaksi diperlukan.
db.users.updateOne(
{ email: 'alice@example.com', 'addresses.label': 'home' },
{ $set: { 'addresses.$.zip': '78703' } }
);Kelebihan Prestasi Bacaan
MongoDB menyimpan dokumen sebagai gumpalan BSON bersebelahan pada cakera. Apabila anda membenamkan data berkaitan, enjin membaca satu blok storan dan bukannya mengimbas dua koleksi berasingan. Peletakan bersama data berkaitan ini ialah sebab utama dokumen terbenam mengatasi perujukan untuk beban kerja yang banyak membaca, apabila induk dan anak hampir sentiasa diakses bersama.
Pembenaman dalam Mongoose
Dalam Mongoose, anda mentakrifkan skema subdokumen dan menyusunnya di dalam skema induk. Mongoose menganggap tatasusunan terbenam sebagai tatasusunan subdokumen, lalu menyediakan pengesahan jenis penuh dan cangkuk kitar hayat pada setiap elemen. Model induk menyimpan keseluruhan pepohon secara atomik.
const addressSchema = new mongoose.Schema({
label: String,
street: String,
city: String,
zip: String
});
const userSchema = new mongoose.Schema({
name: String,
email: String,
addresses: [addressSchema] // embedded array of sub-documents
});
const User = mongoose.model('User', userSchema);Apabila Pembenaman Amat Sesuai
Pembenaman berfungsi paling baik apabila: (1) data anak sentiasa diakses bersama induk; (2) bilangan anak kecil dan terhad; (3) anak tidak memerlukan kitar hayat bebasnya sendiri (contohnya, anak tidak pernah ditanya atau dikemas kini secara berasingan). Jika ketiga-tiga syarat ini benar, pembenaman hampir pasti merupakan pilihan yang optimum.
Had Saiz Dokumen
Setiap dokumen MongoDB mempunyai had saiz tetap sebanyak 16 MB. Untuk hubungan satu kepada beberapa, perkara ini jarang menjadi kebimbangan—pengguna dengan sepuluh alamat atau pesanan dengan dua puluh item baris masih jauh di bawah had. Walau bagaimanapun, anda hendaklah memantau pertumbuhan dokumen dari semasa ke semasa bagi memastikan pembenaman tidak menyebabkan dokumen menghampiri had tersebut.
Pembenaman berbanding Perujukan Sekilas Pandang
Gunakan perbandingan pantas ini untuk membantu membuat pilihan:
- Pembenaman: satu pertanyaan, kemas kini atomik, bilangan anak kecil dan terhad
- Perujukan: bilangan anak fleksibel, anak dikongsi, pertanyaan anak secara bebas
Untuk hubungan satu kepada beberapa, pembenaman lebih baik dari hampir setiap segi. Anda mengelakkan perjalanan pergi balik rangkaian tambahan dan mengekalkan skema yang mudah.
Contoh Praktikal: Tag Catatan Blog
Catatan blog biasanya mempunyai set tag yang kecil dan tetap. Daripada mengekalkan koleksi tags berasingan dengan rujukan, benamkan tag sebagai tatasusunan rentetan terus dalam dokumen catatan. Pertanyaan catatan mengikut tag adalah cekap dengan indeks berbilang kunci pada medan tags, dan pembacaan catatan sentiasa memulangkan tagnya dalam dokumen yang sama.
db.posts.insertOne({
title: 'Getting Started with MongoDB',
body: 'MongoDB is a document database...',
tags: ['mongodb', 'nosql', 'database'],
author: 'Alice',
createdAt: new Date()
});
// Index the tags array for fast tag-based lookups
db.posts.createIndex({ tags: 1 });Semakan Pantas
Uji pemahaman anda tentang konsep MongoDB & pangkalan data NoSQL daripada pelajaran ini.
Ringkasan Pelajaran
Dalam pelajaran ini anda mempelajari bahawa: pembenaman meletakkan data berkaitan di dalam dokumen induk, hubungan satu kepada beberapa mendapat manfaat daripada pembenaman kerana satu bacaan mendapatkan semua data, dan Mongoose menyokong skema subdokumen untuk tatasusunan terbenam yang selamat dari segi jenis. Seterusnya kita akan meneroka perujukan—bila dokumen perlu dipautkan merentasi koleksi dan bukannya disusun secara bersarang.
Pelajari JavaScript dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “Pembenaman: Hubungan Satu-ke-Beberapa” percuma?
Ya — teks penuh “Pembenaman: Hubungan Satu-ke-Beberapa” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus MongoDB Academy, tingkat taraf kepada CoddyKit PRO. Kursus MongoDB Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pembenaman: Hubungan Satu-ke-Beberapa”?
Pelajar akan membenamkan subdokumen untuk data yang berkait rapat dan mengukur kelebihan prestasi bacaan apabila maklumat berkaitan ditempatkan bersama. Anda berlatih MongoDB Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan MongoDB Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran MongoDB Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Pembenaman: Hubungan Satu-ke-Beberapa” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran MongoDB Academy ini?
Ya. Setiap pelajaran MongoDB Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Pembenaman: Hubungan Satu-ke-Beberapa
- Rujukan: Satu-ke-Banyak dan Banyak-ke-Banyak
- Antipola Tatasusunan Tanpa Had
- Rangka Kerja Keputusan Reka Bentuk Skema