Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. Node.js
Code

Pengenalan kepada Mongoose untuk MongoDB dan Node.js

by
Length:LongLanguages:
This post is part of a series called An Introduction to Mongoose for MongoDB and Node.js.
Bulk Import a CSV File Into MongoDB Using Mongoose With Node.js

Malay (Melayu) translation by Muhammad Nabil (you can also view the original English article)

Mongoose adalah rangka JavaScript yang biasa digunakan dalam aplikasi Node.js dengan pangkalan data MongoDB. Dalam artikel ini, saya akan memperkenalkan anda kepada Mongoose dan MongoDB, dan lebih penting lagi jika teknologi ini sesuai dengan permohonan anda.

Apa itu MongoDB?

Mari kita mulakan dengan MongoDB. MongoDB adalah pangkalan data yang menyimpan data anda sebagai dokumen. Kebanyakan dokumen-dokumen ini sama dengan struktur JSON:

Dokumen kemudian diletakkan dalam koleksi. Sebagai contoh, dokumen contoh di atas mentakrifkan objek user . Objek user ini kemudiannya akan menjadi sebahagian daripada koleksi yang dipanggil users

Salah satu penentu MongoDB adalah fleksibiliti dalam masalah struktur. Walaupun pada contoh pertama, objek user mengandungi properti firstName dan lastName , harta ini tidak diperlukan dalam setiap dokumen user yang merupakan sebahagian dari koleksi users .  Inilah yang menjadikan MongoDB sangat berbeza dari pangkalan data SQL seperti MySQL atau Microsoft SQL Server yang memerlukan skema pangkalan data yang telah ditakrifkan untuk setiap objek yang tersimpan.

Keupayaan untuk membuat objek dinamik yang disimpan sebagai dokumen dalam pangkalan data adalah di mana kerja Mongoose.

Apa itu Mongoose?

Mongoose adalah Dokumen Objek Mapper (ODM). Ini bermakna Mongoose membolehkan anda untuk menentukan objek dengan skema yang sebenarnya ditaip yang dipetakan ke dokumen MongoDB.

Mongoose menyediakan jumlah fungsi yang luar biasa yang berkaitan dengan penciptaan dan pelaksanaan skim tersebut. Mongoose kini mempunyai lapan jenis skim di mana hartanah disimpan seperti yang ada di MongoDB. Antaranya:

  1. String
  2. Nombor
  3. Tarik
  4. Penimbal
  5. Boolean
  6. Bercampur
  7. ObjectId
  8. Array

Setiap jenis data membolehkan anda menentukan:

  • nilai lalai
  • fungsi pengesahan tersuai
  • tunjukkan bidang yang diperlukan
  • dapatkan fungsi yang membolehkan anda memanipulasi data sebelum dikembalikan sebagai objek
  • satu set fungsi yang membolehkan anda memanipulasi data sebelum disimpan ke pangkalan data
  • membuat indeks yang membolehkan data ditarik lebih cepat

Di samping pilihan umum ini, jenis data tertentu membolehkan anda menyesuaikan lagi bagaimana data disimpan dan diambil dari pangkalan data. Sebagai contoh, jenis data String juga membolehkan anda menentukan pilihan tambahan seperti berikut:

  • tukar ke huruf kecil
  • Tukar ke huruf besar
  • memotong data sebelum menyimpan
  • ungkapan biasa yang boleh mengehadkan data yang dibenarkan disimpan semasa proses pengesahan
  • enum yang boleh menentukan senarai rentetan yang sah

Number dan Date hartanah menyokong penentuan nilai minimum dan maksimum yang dibenarkan untuk medan tersebut.

Kebanyakan lapan jenis data yang dibenarkan harus diketahui oleh anda. Walau bagaimanapun, terdapat beberapa pengecualian yang mungkin pengecualian untuk anda, seperti Buffer Mixed , ObjectId , dan Array .

Jenis data Buffer membenarkan anda memasukkan data binari. Contoh umum untuk data binari seperti imej atau fail encodem seperti dokumen PDF.

Jenis data Mixed menukar sifat ke medan "boleh apa-apa". Bidang ini menyerupai berapa banyak pemaju menggunakan MongoDB kerana tidak ada struktur yang jelas.  Berhati-hati menggunakan jenis data ini kerana jenis ini kehilangan banyak ciri hebat yang disediakan oleh Mongoose, seperti pengesahan data dan pengesan perubahan entiti dapat mengetahui secara automatik dalam mengemas kini sifat semasa menyimpan.

ObjectId data ObjectId umumnya menentukan pautan ke dokumen lain dalam pangkalan data anda.Sebagai contoh, jika anda mempunyai koleksi buku dan penulis, dokumen buku mungkin mengandungi harta ObjectId yang menunjuk kepada pengarang tertentu dari dokumen tersebut.

Jenis Array Data membolehkan anda menyimpan array seperti JavaScript. Dengan jenis data seragam, anda boleh melakukan operasi array umum Javascript, seperti push, pop, shift, slice, dll.

Recap pendek

Sebelum meneruskan dan menghasilkan beberapa kod, saya ingin mengulangi apa yang baru kita pelajari.MongoDB adalah pangkalan data yang membolehkan anda menyimpan dokumen dengan struktur dinamik. Dokumen-dokumen ini disimpan dalam koleksi.

Mongoose adalah perpustakaan JavaScript yang membolehkan anda menentukan skema dengan data yang diketik dengan kuat.  Selepas skema ditakrifkan, Mongoose membolehkan anda membuat model berdasarkan skema tertentu Model Mongoose kemudian dipetakan ke Dokumen MongoDB melalui definisi skema Model.

Selepas anda menentukan skema dan model anda, Mongoose mengandungi pelbagai fungsi yang membolehkan anda mengesahkan, menyimpan, memadam, dan menanyakan data anda menggunakan fungsi MongoDB yang biasa. Saya akan membincangkan ini dengan contoh kod konkrit untuk diikuti.

Pasang MongoDB

Sebelum kita dapat membuat skema dan model Mongoose kita, MongoDB mesti dipasang dan dikonfigurasikan. Saya cadangkan melawat laman muat turun MongoDB  . Terdapat beberapa pilihan yang berbeza untuk dipasang. Saya telah berhubung dengan Pelayan Komuniti. Ini membolehkan anda memasang beberapa versi sistem operasi anda.  MongoDB juga menawarkan Pelayan Server Enterprise dan pemasangan bantuan awan. Oleh kerana semua buku boleh ditulis semasa memasang, menetapkan, dan mengawasi MongoDB, saya akan berpegang dengan Server Komuniti.

Selepas anda selesai memuat turun dan memasang MongoDB untuk sistem pengendalian yang anda pilih, anda mesti memulakan pangkalan data. Daripada mencipta roda baharu, saya cadangkan anda melawat dokumentasi MongoDB mengenai cara memasang MongoDB Community Edition .

Saya akan tunggu di sini apabila anda mengkonfigurasi MongoDB. Apabila sudah siap, kami boleh terus menubuhkan Mongoose untuk menyambung ke pangkalan data MongoDB yang baru dipasang.

Sediakan Mongoose

Mongoose adalah rangka JavaScript, dan saya akan menggunakannya dalam aplikasi Node.js. Jika anda telah memasang Node.js, anda boleh meneruskan ke langkah seterusnya.  Jika anda tidak memasang Node.js, saya cadangkan anda mulakan dengan melawat Laman Muat Node.js dan memilih pemasang untuk sistem pengendalian anda.

Selepas Node.js telah ditetapkan dan sedia untuk digunakan, saya akan membuat aplikasi baru dan kemudian memasang Pakej NPM Mongoose.

Dengan arahan arahan ditetapkan kepada aplikasi yang anda ingin pasang, anda boleh menjalankan perintah berikut:

Untuk permulaan permohonan saya, saya meninggalkan segala-galanya kepada nilai lalai. Sekarang saya akan memasang pakej Mongoose seperti berikut:

Dengan semua prasyarat yang dikonfigurasikan, mari sambungkan ke pangkalan data MongoDB. Saya telah meletakkan kod berikut dalam fail index.js kerana saya memilihnya sebagai titik permulaan untuk permohonan saya:

Baris pertama termasuk perpustakaan mongoose . Kemudian, saya membuka sambungan ke pangkalan data yang saya panggil mongoose_basics menggunakan fungsi connect .

Fungsi connect menerima dua pilihan parameter lain. Parameter kedua ialah pemilihan objek di mana anda boleh menentukan perkara seperti nama pengguna dan kata laluan jika diperlukan.  Parameter ketiga, yang juga boleh menjadi parameter kedua jika anda tidak mempunyai pilihan, adalah fungsi panggil balik selepas cuba menyambung. Fungsi panggilan balik boleh digunakan dalam salah satu daripada dua cara:

Untuk mengelakkan kemungkinan pengenalan kepada Janji JavaScript , saya akan menggunakan kaedah pertama. Di bawah adalah fail index.js yang dikemaskini:

Jika ralat berlaku apabila menyambung ke pangkalan data, pengecualian akan dilemparkan dan proses seterusnya akan dihentikan. Apabila tidak ada kesilapan, saya akan menghantar mesej yang sudah log masuk ke konsol.

Mongoose kini ditetapkan dan disambungkan ke pangkalan data yang dikenali sebagai mongoose_basics .Sambungan My MongDDB tidak menggunakan nama pengguna, kata laluan atau pelabuhan tersuai.  Jika anda mahu menetapkan pilihan ini atau pilihan lain semasa menyambungkan, saya cadangkan anda melawat Dokumentasi Mongoose untuk menyambungkan .  Dokumentasi ini memberikan penjelasan terperinci mengenai pelbagai pilihan yang ada termasuk cara membuat sambungan, penyambungan sambungan, replika, dan sebagainya.

Selepas sambungan telah berjaya, mari kita beralih ke menentukan skema Mongoose.

Menetapkan Skema Mongoose

Pada pengenalan, saya menunjukkan objek user yang mengandungi dua sifat: firstName dan lastName .Dalam contoh berikut, saya telah menterjemahkan dokumen tersebut ke dalam Skim Mongoose:

Ini skema yang sangat asas yang hanya mengandungi dua sifat tanpa sebarang sifat yang berkaitan dengannya. Mari tambahkan contoh ini dengan menukar harta pertama dan nama belakang kepada objek kanak-kanak dari name .  name hartanah akan merangkumi kedua-dua nama pertama dan terakhir. Saya juga akan menambah harta jenis Date .

Seperti yang anda dapat lihat, Mongoose membolehkan saya untuk membuat skema yang sangat fleksibel dengan banyak kombinasi kemungkinan yang berbeza tentang bagaimana saya dapat mengatur data saya.

Dalam contoh seterusnya, saya akan membuat dua skema baru yang akan menunjukkan bagaimana untuk berhubungan dengan skim lain: author dan book . Skim book mengandungi rujukan kepada skim author .

Contoh di atas adalah skema author yang diperluaskan berdasarkan konsep skema user yang saya buat dalam contoh terdahulu. Untuk menyambung antara Pengarang dan Buku, harta pertama skim author adalah harta yang merupakan jenis skema ObjectId .  _id adalah sintaks biasa untuk mewujudkan kunci utama di Mongoose dan MongoDB. Kemudian, seperti skim user , saya telah menentukan name hartanah yang mengandungi pengarang nama pertama dan nama akhir.

Melanjutkan dari skema user skema, author mengandungi beberapa jenis skema String . Saya juga telah menambah jenis skema Buffer yang boleh meletakkan gambar profil penulis.  Harta terakhir memegang tarikh penciptaan penulis; Walau bagaimanapun, anda mungkin melihat bahawa ia dibuat sedikit berbeza kerana nilai lalai kini "sekarang".  Apabila penulis dalam pangkalan data, harta ini akan ditetapkan pada tarikh / masa semasa.

Untuk melengkapkan contoh skema, mari kita buat skema book skema yang mengandungi rujukan kepada penulis menggunakan jenis skema ObjectId :

Skim book mengandungi beberapa jenis String jenis. Seperti yang dinyatakan di atas, skim ini merujuk kepada skim author .  Untuk terus menunjukkan definisi skema yang kuat, skim book juga mengandungiArray ratings . Setiap penarafan terdiri daripada summary detail , numberOfStars , dan tarikh yang created .

Mongoose membolehkan anda fleksibiliti dalam scheming dengan skema lain atau, seperti contoh di atas dengan ratings harta, ini membolehkan anda membuat Array sifat kanak-kanak yang boleh diisi dalam skema hubungan (seperti buku kepada pengarang) atau berturut-turut sebagai contoh di atas (dengan buku untuk penarafan Array ).

Mewujudkan dan Menyelamatkan Model Mongoose

Selepas skema author dan book menunjukkan kelonggaran skema Mongoose, saya akan terus menggunakan skim ini dan mendapatkan model Author dan Book daripadanya.

Model Mongoose, apabila disimpan, membuat dokumen di MongoDB dengan sifat yang ditentukan oleh skema asal.

Untuk menunjukkan penciptaan dan penyimpanan objek, dalam contoh seterusnya, saya akan membuat beberapa objek: Author Model dan beberapa model Book . Sebaik sahaja dibuat, objek ini akan disimpan ke MongoDB menggunakan kaedah save dari Model.

Dalam contoh di atas, saya tanpa malu mengaitkan rujukan kepada dua buku terbaharu saya. Contohnya bermula dengan membuat dan menyimpan jamieObject dibuat dari Model Author .  Dalam fungsi save jamieObject , jika ralat berlaku, aplikasi akan mengeluarkan pengecualian. Jika simpan berjaya, dalam fungsi save , dua objek buku dibuat dan disimpan.  Sama seperti jamieObject , jika ralat berlaku semasa menyimpan, ralat akan muncul; Jika tidak, mesej yang berjaya dikeluarkan pada konsol.

Untuk membuat rujukan kepada Pengarang, objek buku merujuk kepada dua skema author skema _id utama dalam harta author skema book .

Mengesahkan Data Sebelum Disimpan

Secara umumnya untuk data yang akan menghasilkan model yang akan diisi oleh borang di laman web.Oleh itu, adalah baik untuk mengesahkan data ini sebelum menyimpan Model kepada MongoDB.

Dalam contoh seterusnya, saya telah mengemas kini skim pengarang terdahulu untuk menambah pengesahan dari sifat berikut: firstName twitter , facebook , and linkedin .

Property firstName telah diberikan atribut dengan harta yang required . Kini apabila saya memanggil fungsi save , Mongoose akan mengembalikan mesej ralat yang menunjukkan bahawa harta firstNamedi perlukan.  Saya memilih untuk tidak menggunakan harta yang diperlukan terakhir dalam kes Cher atau Madonna akan menjadi pengarang pangkalan data saya.

Ciri-ciri twitter , facebook , dan linkedin semuanya mempunyai pengesah tersuai yang sangat mirip dengan yang diterapkan kepada mereka. Setiap daripada mereka memastikan bahawa nilai bermula dengan nama domain rangkaian sosial masing-masing.  Bidang ini tidak diperlukan, jadi pengesah hanya akan digunakan jika data dibekalkan untuk harta tersebut

Cari dan Kemas kini Data

Pengenalan Mongoose tidak akan lengkap tanpa contoh mencari rekod dan mengemas kini satu atau lebih sifat pada objek tersebut.

Mongoose menyediakan beberapa fungsi yang berbeza untuk mencari data untuk model tertentu. Fungsi ini find , findOne , dan findById .

find dan findOne berfungsi kedua-duanya menerima objek sebagai input yang membolehkan carian kompleks, sementara findById hanya menerima satu nilai dengan fungsi panggilan balik (contoh akan dimasukkan tidak lama lagi). Dalam contoh seterusnya, saya akan menunjukkan bagaimana untuk mencari semua buku yang mengandungi rentetan "mvc" dalam tajuk mereka.

Dalam fungsi find , saya mencari tali dengan kes "mvc" sensitif dalam title harta. Ini dilakukan menggunakan sintaks yang sama untuk mencari rentetan dengan JavaScript .

Fungsi panggilan cari juga dirantai kepada kaedah pertanyaan lain, seperti where , and , or , limit sort ,any , dan lain-lain

Mari tambahkan contoh terdahulu untuk menghadkan hasil kami ke lima buku pertama dan semak tarikh yang dibuat dalam penurunan. Fungsi ini akan mengembalikan lima buku terbaharu yang mengandungi "mvc" dalam tajuk.

Selepas memohon fungsi find , urutan fungsi lain tidak penting kerana semua fungsi terikat disusun menjadi satu permintaan tunggal dan tidak dilaksanakan sehingga fungsi exec dipanggil.

Seperti yang saya nyatakan sebelum ini, findById dijalankan sedikit berbeza. Fungsi ini segera dilaksanakan dan menerima fungsi panggil balik, dan bukan meninggalkan siri fungsi. Dalam contoh berikut, saya menyoal pengarang tertentu dengan _id .

_id Dalam kes anda mungkin sedikit berbeza. Saya menyalin _id ini dari console.log sebelum apabila saya menemui senarai buku dengan "mvc" dalam tajuk.

Sekali objek telah dipulangkan, anda boleh mengubah suai harta untuk mengemas kininya. Selepas anda membuat perubahan yang diperlukan, anda memanggil kaedah save , seperti ketika anda membuat objek. Dalam contoh berikut, saya akan memperluaskan contoh findbyId dan kemas kini hartanah kepada pengarang.

Selepas pengarang telah diambil, harta yang linkedin telah ditetapkan dan fungsi save telah dipanggil. Mongoose dapat mengesan bahawa properti linkedin telah berubah, dan akan menghantar pernyataan kemas kini kepada MongoDB hanya pada sifat yang diubahsuai.  Jika ralat berlaku semasa menyimpan, pengecualian akan dibuang dan akan menghentikan permohonan itu. Apabila berjaya, mesej berjaya pergi ke konsol.

Mongoose juga menawarkan dua fungsi tambahan yang membuat carian objek dan menyimpannya dalam satu langkah dengan fungsi yang bernama: findByIdAndUpdate dan findOneAndUpdate . Mari kita kemas kini contoh sebelumnya untuk menggunakan findByIdAndUpdate .

Dalam contoh sebelumnya, harta yang akan dikemas kini dibekalkan sebagai objek kepada parameter kedua fungsi findByIdAndUpdate . Fungsi panggil balik kini menjadi parameter ketiga.  Apabila kemas kini berjaya, objek author mengembalikan maklumat terkini. Objek ini pergi ke konsol untuk melihat sifat pengarang yang dikemas kini.

Contoh Kod Terakhir

Sepanjang artikel ini, saya menyediakan kod kecil untuk mengenal pasti tindakan yang sangat spesifik, seperti membuat skim, pemodelan, dll. Mari gabungkan semuanya dalam contoh yang lengkap.

Pertama, saya membuat dua fail tambahan: author.js dan book.js Fail ini mengandungi definisi skema dan penciptaan setiap model. garisan terakhir kod berikut membuat model tersedia untuk digunakan dalam fail index.js .

Mari bermula dengan author.js file:

Seterusnya datang fail book.js :

Dan akhirnya, fail index.js dikemas index.js :

Dalam contoh di atas, semua tindakan Mongoose mengandungi fungsi connect . author dan fail bookdisertakan dengan fungsi yang require setelah memasuki perpustakaan perpustakaan mongoose .

Dengan berjalan MongoDB, kini anda boleh menjalankan aplikasi Node.js lengkap dengan arahan berikut:

Selepas saya menyimpan beberapa data saya ke pangkalan data saya, saya mengemas kini fail index.jsfungsi fail seperti berikut:

Sekali lagi, anda boleh menjalankan aplikasi dengan arahan: node index.js .

Kesimpulannya

Selepas membaca artikel ini, anda perlu membuat Skema dan Model Mongolia yang sangat fleksibel, menggunakan pengesahan yang mudah atau rumit, membuat dan mengemaskini dokumen, dan akhirnya mencari dokumen yang telah dibuat.

Semoga sekarang anda berasa selesa menggunakan Mongoose. Sekiranya anda ingin mengetahui lebih lanjut, saya cadangkan mengkaji Panduan Mongoose yang menyiasat topik yang lebih maju seperti populasi, middleware, temu janji, dan sebagainya.

Happy Hunting (rujukan makhluk buruk Mongoose)!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.