Rumah >pangkalan data >MongoDB >Bagaimana saya bekerja dengan dokumen dan tatasusunan tertanam di MongoDB?

Bagaimana saya bekerja dengan dokumen dan tatasusunan tertanam di MongoDB?

Karen Carpenter
Karen Carpenterasal
2025-03-11 18:09:15810semak imbas

Artikel ini meneroka dokumen dan tatasusunan tertanam MongoDB. Ia membincangkan mewujudkan, menanyakan, dan mengemas kini medan bersarang, membandingkan implikasi prestasi penyemakan berbanding rujukan, dan menawarkan amalan terbaik reka bentuk skema untuk keberkesanan optimum

Bagaimana saya bekerja dengan dokumen dan tatasusunan tertanam di MongoDB?

Bekerja dengan dokumen dan tatasusunan tertanam di MongoDB

Fleksibiliti MongoDB bersinar melalui sokongannya untuk dokumen dan tatasusunan tertanam. Dokumen tertanam adalah dokumen yang bersarang dalam dokumen lain, sementara Arrays memegang senarai dokumen atau nilai. Mari kita meneroka cara menggunakannya.

Mewujudkan dan menggunakan dokumen tertanam: Dokumen tertanam adalah ideal apabila data yang berkaitan adalah kecil dan sentiasa diakses bersama. Pertimbangkan koleksi users di mana setiap pengguna mempunyai alamat. Daripada mempunyai koleksi addresses yang berasingan dan merujuknya, anda boleh membenamkan alamat terus dalam dokumen pengguna:

 <code class="json">{ "_id": ObjectId("..."), "name": "John Doe", "email": "john.doe@example.com", "address": { "street": "123 Main St", "city": "Anytown", "zip": "12345" } }</code>

Anda boleh mengakses dokumen tertanam menggunakan notasi dot dalam pertanyaan anda: db.users.find({ "address.city": "Anytown" }) . Anda juga boleh membenamkan tatasusunan dokumen dalam dokumen. Sebagai contoh, pengguna mungkin mempunyai nombor telefon berganda:

 <code class="json">{ "_id": ObjectId("..."), "name": "Jane Doe", "email": "jane.doe@example.com", "phones": [ { "type": "home", "number": "555-1212" }, { "type": "mobile", "number": "555-3434" } ] }</code>

Membuat dan Menggunakan Array: Arrays adalah mudah untuk digunakan. Anda boleh menambah, mengalih keluar, dan mengemas kini elemen secara langsung menggunakan pengendali kemas kini seperti $push , $pull , dan $set . Contohnya, menambah nombor telefon baru:

 <code class="javascript">db.users.updateOne( { "_id": ObjectId("...") }, { $push: { "phones": { "type": "work", "number": "555-5656" } } } )</code>

Implikasi prestasi dokumen tertanam dan dirujuk

Pilihan antara penyembuhan dan rujukan memberi kesan yang signifikan. Embedding umumnya lebih cepat untuk dibaca, terutamanya apabila anda sering memerlukan data yang berkaitan. Ia mengurangkan bilangan pertanyaan pangkalan data yang diperlukan kerana semua maklumat dalam satu dokumen. Walau bagaimanapun, embedding boleh membawa kepada saiz dokumen yang lebih besar, berpotensi memberi kesan kepada prestasi dan kos penyimpanan, terutamanya jika data tertanam adalah besar atau kerap dikemas kini.

Rujukan, sebaliknya, melibatkan membuat koleksi berasingan untuk data yang berkaitan dan menghubungkannya menggunakan ID objek. Ini lebih baik untuk dataset besar dan kerap dikemas kini. Bacaan menjadi sedikit lebih perlahan kerana mereka memerlukan banyak pertanyaan, tetapi menulis biasanya lebih cepat dan lebih efisien kerana dokumen tetap lebih kecil. Rujukan juga membantu mengelakkan duplikasi data dan menggalakkan normalisasi data. Pendekatan terbaik bergantung pada kes penggunaan khusus dan ciri -ciri data. Pertimbangkan saiz data, kekerapan kemas kini, dan corak pertanyaan semasa membuat keputusan ini.

Meminta dan mengemas kini medan bersarang dengan cekap

Meminta dan mengemas kini medan bersarang memerlukan menggunakan notasi titik yang kita lihat sebelumnya. Sebagai contoh, untuk mengemas kini nombor telefon tertentu:

 <code class="javascript">db.users.updateOne( { "_id": ObjectId("..."), "phones.type": "mobile" }, { $set: { "phones.$.number": "555-9876" } } )</code>

Operator $ mensasarkan elemen array tertentu yang sepadan dengan pertanyaan. Untuk pertanyaan atau kemas kini yang lebih kompleks yang melibatkan tatasusunan, pertimbangkan untuk menggunakan saluran paip agregasi. Agregasi menyediakan alat yang berkuasa untuk memproses dan mengubah data, termasuk medan bersarang. Sebagai contoh, anda boleh menggunakan $unwind untuk mendekonstruksi array ke dalam dokumen individu, menjadikannya lebih mudah untuk menapis dan mengemas kini elemen tertentu. Ingatlah untuk menggunakan indeks dengan sewajarnya pada medan bersarang untuk meningkatkan prestasi pertanyaan. Indeks pada medan bersarang dibuat menggunakan notasi dot dalam perintah createIndex .

Amalan terbaik untuk reka bentuk skema

Merancang skema yang berskala dan diselenggara dengan dokumen dan tatasusunan tertanam memerlukan pertimbangan yang teliti.

  • Lokasi Data: Dokumen Benamkan hanya jika mereka kecil dan sentiasa diakses dengan dokumen induk mereka. Data besar atau kerap dikemas kini harus dirujuk.
  • DUN DUN DUN: Elakkan duplikasi data yang berlebihan. Rujukan membantu meminimumkan ini.
  • Saiz data: Simpan dokumen dalam saiz yang munasabah (secara amnya di bawah 16MB). Dokumen besar boleh memberi kesan negatif terhadap prestasi.
  • Kekerapan Kemas Kini: Data yang dikemas kini lebih sesuai untuk rujukan untuk meminimumkan pertarungan menulis.
  • Corak pertanyaan: Menganalisis corak pertanyaan aplikasi anda untuk menentukan strategi penyembuhan/rujukan yang optimum. Jika anda sering menanyakan data yang berkaitan bersama -sama, embedding biasanya bermanfaat.
  • Normalisasi: Walaupun MongoDB fleksibel, pertimbangkan beberapa tahap normalisasi untuk mengekalkan integriti data dan mengelakkan redundansi.
  • Pengindeksan: Gunakan indeks secara strategik pada medan bersarang yang sering ditanya untuk meningkatkan prestasi pertanyaan.
  • Pengesahan Skema: Melaksanakan pengesahan skema untuk memastikan konsistensi dan kualiti data. Ini boleh dilakukan menggunakan alat seperti ciri pengesahan skema MongoDB atau logik pengesahan tersuai dalam permohonan anda.

Dengan mengikuti amalan terbaik ini, anda boleh membuat skema MongoDB yang cekap, berskala, dan mudah dikekalkan. Ingat bahawa pendekatan optimum sangat bergantung pada keperluan khusus aplikasi anda.

Atas ialah kandungan terperinci Bagaimana saya bekerja dengan dokumen dan tatasusunan tertanam di MongoDB?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn