Jika Anda belum melakukannya, harap luangkan waktu sejenak untuk membaca quickstart untuk mendapatkan gambaran tentang cara kerja Mongoose. Jika Anda bermigrasi dari 5. x ke 6. x harap luangkan waktu sejenak untuk membaca panduan migrasi Show Segala sesuatu di Mongoose dimulai dengan Skema. Setiap skema memetakan ke koleksi MongoDB dan menentukan bentuk dokumen di dalam koleksi itu Jika Anda ingin menambahkan kunci tambahan nanti, gunakan metode ini Setiap kunci dalam kode kami _0 mendefinisikan properti dalam dokumen kami yang akan dilemparkan ke yang terkait. Misalnya, kami telah menetapkan properti _1 yang akan dilemparkan ke Jenis Skema dan properti 2 yang akan dilemparkan ke Jenis Skema 3Perhatikan di atas bahwa jika properti hanya memerlukan tipe, properti dapat ditentukan menggunakan notasi steno (kontraskan properti 1 di atas dengan properti 2)Kunci juga dapat diberikan objek bersarang yang berisi definisi kunci/jenis lebih lanjut seperti properti 6 di atas. Ini akan terjadi setiap kali nilai kunci adalah POJO yang tidak memiliki properti 7Dalam kasus ini, Mongoose hanya membuat jalur skema sebenarnya untuk daun di pohon. (seperti 8 dan 9 di atas), dan cabang tidak memiliki jalur sebenarnya. Efek sampingnya adalah 6 di atas tidak dapat memiliki validasinya sendiri. Jika validasi diperlukan di atas pohon, jalur perlu dibuat di atas pohon - lihat bagian Subdokumen untuk informasi lebih lanjut tentang cara melakukan ini. Baca juga subbagian Campuran dari panduan SchemaTypes untuk beberapa gotchaJenis Skema yang diizinkan adalah Baca lebih lanjut tentang SchemaTypes di sini Skema tidak hanya menentukan struktur dokumen Anda dan casting properti, mereka juga menentukan document , , , dan document lifecycle hooks yang disebut middleware Untuk menggunakan definisi skema kita, kita perlu mengonversi 0 kita menjadi Model yang dapat kita kerjakan. Untuk melakukannya, kami menyebarkannya ke 2Secara default, Mongoose menambahkan properti 3 ke skema AndaSaat Anda membuat dokumen baru dengan properti 3 yang ditambahkan secara otomatis, Mongoose membuat 3 tipe ObjectId baru ke dokumen AndaAnda juga dapat menimpa default Mongoose 3 dengan 3 Anda sendiri. Hati-hati. Mongoose akan menolak untuk menyimpan dokumen yang tidak memiliki 3, jadi Anda bertanggung jawab untuk menyetel 3 jika Anda menentukan jalur 3 Anda sendiriContoh _1 adalah dokumen. Dokumen memiliki banyak metode instance bawaannya sendiri. Kami juga dapat menentukan metode contoh dokumen kustom kami sendiriSekarang semua instance _2 kami memiliki metode 3 yang tersedia untuk mereka
Anda juga dapat menambahkan fungsi statis ke model Anda. Ada tiga cara yang setara untuk menambahkan statis
Jangan mendeklarasikan statika menggunakan fungsi panah ES6 ( 6). Fungsi panah, jadi contoh di atas tidak akan berfungsi karena nilai 7Anda juga dapat menambahkan fungsi pembantu kueri, yang seperti metode instan tetapi untuk kueri luwak. Metode pembantu kueri memungkinkan Anda memperluas API pembuat kueri rantai luwak MongoDB mendukung indeks sekunder. Dengan luwak, kami mendefinisikan indeks ini dalam level 4 atau 5 kami. Menentukan indeks pada tingkat skema diperlukan saat membuat indeks majemukLihat untuk opsi indeks lainnya Saat aplikasi Anda dijalankan, Mongoose secara otomatis memanggil setiap indeks yang ditentukan dalam skema Anda. Mongoose akan memanggil _6 untuk setiap indeks secara berurutan, dan memancarkan peristiwa 'indeks' pada model saat semua panggilan 6 berhasil atau saat terjadi kesalahan. Meskipun bagus untuk pengembangan, disarankan agar perilaku ini dinonaktifkan dalam produksi karena pembuatan indeks dapat menyebabkan a. Nonaktifkan perilaku dengan menyetel opsi _9 dari skema Anda ke 0, atau secara global pada koneksi dengan menyetel opsi 9 ke 0Mongoose akan mengeluarkan peristiwa 3 pada model saat indeks selesai dibuat atau terjadi kesalahanLihat juga caranya adalah properti dokumen yang bisa Anda dapatkan dan atur tetapi tidak bertahan di MongoDB. Getter berguna untuk memformat atau menggabungkan bidang, sedangkan setter berguna untuk mendekomposisi satu nilai menjadi beberapa nilai untuk penyimpanan Misalkan Anda ingin mencetak nama lengkap orang tersebut. Anda bisa melakukannya sendiri Tetapi menggabungkan nama depan dan belakang setiap saat bisa menjadi rumit. Dan bagaimana jika Anda ingin melakukan pemrosesan ekstra pada nama, seperti menghapus diakritik? Sekarang, luwak akan memanggil fungsi pengambil Anda setiap kali Anda mengakses properti 4Jika Anda menggunakan 6 atau 7 luwak tidak akan menyertakan virtual secara default. Ini termasuk hasil pemanggilan _8 pada dokumen Mongoose, karena. Lewati _1 ke salah satu atauAnda juga dapat menambahkan penyetel khusus ke virtual Anda yang memungkinkan Anda menyetel nama depan dan nama belakang melalui 4 virtualPenyetel properti virtual diterapkan sebelum validasi lainnya. Jadi contoh di atas akan tetap berfungsi meskipun bidang nama 5 dan 6 diperlukanHanya properti non-virtual yang berfungsi sebagai bagian dari kueri dan untuk pemilihan bidang. Karena virtual tidak disimpan di MongoDB, Anda tidak dapat menanyakannya Anda dapat mempelajari lebih lanjut tentang virtual di sini Alias adalah jenis virtual tertentu di mana pengambil dan penyetel secara mulus mendapatkan dan menyetel properti lain. Ini berguna untuk menghemat bandwidth jaringan, sehingga Anda dapat mengonversi nama properti pendek yang disimpan dalam database menjadi nama yang lebih panjang agar kode mudah dibaca Anda juga dapat mendeklarasikan alias di jalur bersarang. Lebih mudah menggunakan skema dan subdokumen bersarang, tetapi Anda juga dapat mendeklarasikan alias jalur bersarang sebaris selama Anda menggunakan jalur bersarang lengkap 7 sebagai aliasSkema memiliki beberapa opsi yang dapat dikonfigurasi yang dapat diteruskan ke konstruktor atau ke metode 8Opsi yang valid Secara default, Mongoose membuat semua indeks yang ditentukan dalam skema model Anda dengan memanggil setelah Anda berhasil terhubung ke MongoDB. Membuat indeks secara otomatis sangat bagus untuk lingkungan pengembangan dan pengujian. Tetapi build indeks juga dapat membuat beban yang signifikan pada database produksi Anda. Jika Anda ingin mengelola indeks dengan hati-hati dalam produksi, Anda dapat menyetel 9 ke false
Opsi _9 diatur ke 3 secara default. Anda dapat mengubah default ini dengan pengaturanSebelum Mongoose membangun indeks, Mongoose memanggil 5 untuk membuat koleksi dasar di MongoDB secara default. Memanggil 6 menyetel susunan default koleksi berdasarkan dan menetapkan koleksi sebagai koleksi tertutup jika Anda menyetelAnda dapat menonaktifkan perilaku ini dengan menyetel 8 ke 0 menggunakan. Seperti _9, 8 berguna untuk lingkungan pengembangan dan pengujian, tetapi Anda mungkin ingin menonaktifkannya untuk produksi guna menghindari panggilan database yang tidak perluSayangnya, 6 tidak dapat mengubah koleksi yang ada. Misalnya, jika Anda menambahkan 4 ke skema Anda dan koleksi yang ada tidak dibatasi, 6 tidak akan menimpa koleksi yang ada. Itu karena server MongoDB tidak mengizinkan mengubah opsi koleksi tanpa menghapus koleksi terlebih dahuluSecara default, buffer mongoose memerintahkan saat koneksi terputus hingga driver berhasil menyambung kembali. Untuk menonaktifkan buffering, atur 6 ke false
Opsi skema 6 menggantikan opsi global 6Jika _6 aktif, opsi ini menetapkan jumlah waktu maksimum buffering Mongoose akan menunggu sebelum melontarkan kesalahan. Jika tidak ditentukan, Mongoose akan menggunakan 10000 (10 detik)Mongoose mendukung koleksi yang dibatasi oleh MongoDB. Untuk menentukan koleksi MongoDB yang mendasari menjadi 7, setel opsi 7 ke ukuran maksimum koleksi di
Opsi _7 juga dapat disetel ke objek jika Anda ingin memberikan opsi tambahan seperti atau. Dalam hal ini Anda harus secara eksplisit memberikan opsi 3, yang diperlukan
Mongoose secara default menghasilkan nama koleksi dengan meneruskan nama model ke metode. Metode ini jamak nama. Setel opsi ini jika Anda membutuhkan nama lain untuk koleksi Anda
Saat Anda menentukan diskriminator, Mongoose menambahkan jalur ke skema Anda yang menyimpan diskriminator mana yang merupakan instance dari dokumen. Secara default, Mongoose menambahkan jalur 4, tetapi Anda dapat mengatur 5 untuk menimpa default iniMongoose menetapkan setiap skema Anda sebagai pengambil virtual 6 secara default yang mengembalikan bidang 3 dokumen yang dilemparkan ke string, atau dalam kasus ObjectIds, hexString-nya. Jika Anda tidak ingin getter 6 ditambahkan ke skema Anda, Anda dapat menonaktifkannya dengan meneruskan opsi ini pada waktu pembuatan skemaMongoose menetapkan setiap skema Anda bidang 3 secara default jika tidak diteruskan ke konstruktor. Jenis yang ditetapkan adalah untuk bertepatan dengan perilaku default MongoDB. Jika Anda sama sekali tidak ingin _3 ditambahkan ke skema Anda, Anda dapat menonaktifkannya menggunakan opsi iniAnda hanya dapat menggunakan opsi ini pada subdokumen. Mongoose tidak dapat menyimpan dokumen tanpa mengetahui idnya, jadi Anda akan mendapatkan kesalahan jika mencoba menyimpan dokumen tanpa 3Mongoose akan, secara default, "meminimalkan" skema dengan menghapus objek kosong Perilaku ini dapat diganti dengan menyetel opsi 02 ke 0. Ini kemudian akan menyimpan objek kosongUntuk memeriksa apakah suatu objek kosong, Anda dapat menggunakan helper 04Mengizinkan pengaturan opsi di tingkat skema, memberi kami cara untuk menerapkan default ke semua kueri yang berasal dari model Alias dari setiap pref juga diizinkan jadi daripada harus mengetik 'secondaryPreferred' dan salah mengeja, kita cukup meneruskan 'sp' Opsi baca juga memungkinkan kita menentukan kumpulan tag. Ini memberi tahu pengemudi dari anggota set replika mana yang harus dicoba untuk dibaca. Baca lebih lanjut tentang kumpulan tag dan di sini CATATAN. Anda juga dapat menentukan opsi preferensi baca driver saat menghubungkan Mengizinkan pengaturan masalah tulis di tingkat skema
Opsi 05 digunakan ketika kita memiliki arsitektur MongoDB yang dipecah. Setiap koleksi shard diberi kunci pecahan yang harus ada di semua operasi penyisipan/pembaruan. Kami hanya perlu menyetel opsi skema ini ke kunci beling yang sama dan kami akan siap
Perhatikan bahwa Mongoose tidak mengirimkan perintah 06 untuk Anda. Anda harus mengonfigurasi pecahan Anda sendiriOpsi ketat, (diaktifkan secara default), memastikan bahwa nilai yang diteruskan ke konstruktor model kami yang tidak ditentukan dalam skema kami tidak disimpan ke db Ini juga memengaruhi penggunaan _07 untuk menetapkan nilai propertiNilai ini dapat diganti pada tingkat instance model dengan meneruskan argumen boolean kedua Opsi 08 juga dapat disetel ke 09 yang akan menyebabkan kesalahan dihasilkan alih-alih menjatuhkan data yang burukCATATAN. Set kunci/val apa pun pada instance yang tidak ada dalam skema Anda selalu diabaikan, terlepas dari opsi skema Mongoose mendukung opsi _10 terpisah untuk menghindari mode ketat untuk filter kueri. Ini karena filter kueri kosong menyebabkan Mongoose mengembalikan semua dokumen dalam model, yang dapat menyebabkan masalahOpsi 08 berlaku untuk pembaruan. Opsi 10 hanya untuk filter kueriMongoose memiliki opsi _10 terpisah untuk beralih mode ketat untuk parameter 14 ke kueriSecara umum, kami tidak menyarankan meneruskan objek yang ditentukan pengguna sebagai filter kueri Di Mongoose 6, _10 sama dengan 08 secara default. Namun, Anda dapat mengganti perilaku ini secara globalDi Mongoose 7, _10 nilai default akan dialihkan kembali ke 0. Anda dapat mempersiapkan perubahan dengan menentukanPersis sama dengan opsi tetapi hanya berlaku ketika metode ________0______19 dokumen dipanggil Untuk melihat semua opsi _20 yang tersedia, bacaDokumen memiliki metode yang mengubah dokumen luwak menjadi objek JavaScript biasa. Metode ini menerima beberapa opsi. Alih-alih menerapkan opsi ini berdasarkan per dokumen, kami dapat mendeklarasikan opsi di tingkat skema dan menerapkannya ke semua dokumen skema secara default Agar semua virtual muncul di output 21 Anda, setel opsi 22 ke 23Untuk melihat semua opsi _22 yang tersedia, bacaSecara default, jika Anda memiliki objek dengan kunci 'ketik' dalam skema Anda, luwak akan menafsirkannya sebagai deklarasi tipe Namun, untuk aplikasi seperti geoJSON, properti 'type' sangatlah penting. Jika Anda ingin mengontrol kunci mana yang digunakan mongoose untuk menemukan deklarasi tipe, atur opsi skema 'typeKey' Secara default, dokumen secara otomatis divalidasi sebelum disimpan ke database. Ini untuk mencegah menyimpan dokumen yang tidak valid. Jika Anda ingin menangani validasi secara manual, dan dapat menyimpan objek yang tidak lolos validasi, Anda dapat menyetel 25 ke false 26 adalah properti yang ditetapkan pada setiap dokumen saat pertama kali dibuat oleh Mongoose. Nilai kunci ini berisi revisi internal dokumen. Opsi 26 adalah string yang mewakili jalur yang akan digunakan untuk pembuatan versi. Standarnya adalah _28. Jika ini bertentangan dengan aplikasi Anda, Anda dapat mengonfigurasinyaPerhatikan bahwa pembuatan versi default Mongoose bukanlah solusi konkurensi optimis penuh. Versi default Mongoose hanya beroperasi pada larik seperti yang ditunjukkan di bawah ini Jika Anda membutuhkan dukungan konkurensi yang optimis untuk 29, Anda dapat menyetelPembuatan versi dokumen juga dapat dinonaktifkan dengan menyetel 26 ke 0. JANGAN nonaktifkan versi kecuali Anda tahu apa yang Anda lakukanMongoose hanya memperbarui kunci versi saat Anda menggunakan. Jika Anda menggunakan 34, 35, dll. Mongoose tidak akan memperbarui kunci versi. Sebagai solusinya, Anda dapat menggunakan middleware di bawah ini
Konkurensi optimis adalah strategi untuk memastikan dokumen yang Anda perbarui tidak berubah antara saat Anda memuatnya menggunakan 36 atau 37, dan saat Anda memperbaruinya menggunakan 29Misalnya, Anda memiliki model _39 yang berisi daftar ________0______40, dan 41 yang menunjukkan apakah rumah ini muncul dalam penelusuran. Misalkan sebuah rumah yang berstatus _42 harus memiliki setidaknya dua 40. Anda mungkin menerapkan logika menyetujui dokumen rumah seperti yang ditunjukkan di bawah ini
Fungsi 44 terlihat benar dalam isolasi, tetapi mungkin ada potensi masalah. bagaimana jika fungsi lain menghapus foto rumah antara panggilan 37 dan panggilan 29? Jika Anda menyetel opsi 30 pada skema model 39, skrip di atas akan menimbulkan kesalahanMenetapkan pemeriksaan default untuk setiap kueri dan agregasi. Berikut ini ikhtisar collations ramah-pemula Jika Anda menyetel opsi _49 pada skema, Mongoose akan membuat koleksi deret waktu untuk model apa pun yang Anda buat dari skema tersebut 50 memungkinkan mengecualikan jalur dari pembuatan versi (mis. e. , revisi internal tidak akan bertambah meskipun jalur ini diperbarui). JANGAN lakukan ini kecuali Anda tahu apa yang Anda lakukan. Untuk subdokumen, sertakan ini di dokumen induk menggunakan jalur yang sepenuhnya memenuhi syaratOpsi 51 memberi tahu Mongoose untuk menetapkan bidang 52 dan 53 ke skema Anda. Jenis yang diberikan adalahSecara default, nama bidang adalah 52 dan 53. Sesuaikan nama bidang dengan menyetel _56 dan 57Cara _51 bekerja di bawah tenda adalah
Secara default, Mongoose menggunakan 67 untuk mendapatkan waktu saat ini. Jika Anda ingin menimpa fungsi yang digunakan Mongoose untuk mendapatkan waktu saat ini, Anda dapat mengatur opsi 68. Mongoose akan memanggil fungsi _68 kapan pun dibutuhkan untuk mendapatkan waktu saat iniMongoose mendukung mendefinisikan plugin global, plugin yang berlaku untuk semua skema Terkadang, Anda mungkin hanya ingin menerapkan plugin tertentu ke beberapa skema. Dalam hal ini, Anda dapat menambahkan _70 ke skema
Jika Anda memanggil _71 dengan opsi 72, Mongoose hanya akan menerapkan plugin tersebut ke skema yang memiliki entri yang cocok di 70Secara default, Mongoose akan secara otomatis 74 jalur terisi apa pun untuk Anda, kecuali jika Anda mengecualikannya secara eksplisitUntuk menyisih dari pemilihan kolom berpopulasi secara default, setel 75 ke 0 di skema AndaUntuk alasan lama, ketika ada kesalahan validasi di subjalur skema bersarang tunggal, Mongoose juga akan mencatat bahwa ada kesalahan validasi di jalur skema bersarang tunggal. Sebagai contoh Setel _77 ke 0 pada skema anak untuk membuat Mongoose hanya melaporkan kesalahan indukSkema memiliki yang dapat Anda gunakan untuk membuat skema Mongoose dari kelas ES6 Berikut adalah contoh penggunaan _79 untuk membuat skema dari kelas ES6Skema juga dapat dicolokkan yang memungkinkan kami mengemas fitur yang dapat digunakan kembali ke dalam plugin yang dapat dibagikan dengan komunitas atau hanya di antara proyek Anda Inilah pengantar alternatif untuk skema Mongoose Untuk mendapatkan hasil maksimal dari MongoDB, Anda perlu mempelajari dasar-dasar desain skema MongoDB. Desain skema SQL (bentuk normal ketiga) dirancang untuk meminimalkan biaya penyimpanan, sedangkan desain skema MongoDB adalah tentang membuat kueri umum secepat mungkin. Seri blog 6 Rules of Thumb for MongoDB Schema Design adalah sumber yang bagus untuk mempelajari aturan dasar untuk mempercepat kueri Anda Pengguna yang ingin menguasai desain skema MongoDB di Node. js harus melihat ke Buku Desain Skema MongoDB Kecil oleh Christian Kvalheim, penulis asli MongoDB Node. driver js. Buku ini menunjukkan cara menerapkan skema performa untuk daftar cucian kasus penggunaan, termasuk e-niaga, wiki, dan pemesanan janji temu Bagaimana cara membuat skema di Kompas MongoDB?Anda dapat membuat koleksi baru di database yang sudah ada. . Klik tombol Buat Koleksi. Dari layar Koleksi, klik tombol Buat Koleksi Masukkan informasi koleksi. Dalam dialog Buat Koleksi, masukkan nama koleksi yang akan dibuat. . Klik Buat Koleksi untuk membuat koleksi Bisakah MongoDB memiliki skema?MongoDB menggunakan model skema yang fleksibel , yang berarti bahwa dokumen dalam kumpulan tidak perlu memiliki bidang atau tipe data yang sama secara default. Setelah membuat skema aplikasi, Anda dapat menggunakan validasi skema untuk memastikan tidak ada perubahan skema yang tidak diinginkan atau tipe data yang tidak tepat.
Apa itu skema MongoDB?Apa itu Skema? . Anda dapat menggunakan skema BSON Layanan Aplikasi Atlas, yang memperluas standar Skema JSON, untuk menentukan model data aplikasi Anda dan memvalidasi dokumen setiap kali dibuat, diubah, atau dihapus. a JSON object that defines the the structure and contents of your data. You can use Atlas App Services' BSON schemas, which extend the JSON Schema standard, to define your application's data model and validate documents whenever they're created, changed, or deleted.
Bagaimana cara mendapatkan skema basis data di MongoDB?Kita bisa mendapatkan objek skema/dokumen pertama dari koleksi menggunakan. var schemaObj = db. pengguna. findOne(); |