Dalam menemukan ini dan cukup memahami bagaimana migrasi bekerja pada database relasional, MongoDB membuat ini sedikit lebih sederhana. Aku datang ke 2 cara untuk memecah ini. Hal-hal yang perlu dipertimbangkan ketika menangani migrasi data di MongoDB (tidak terlalu umum dari RDB) adalah:
- Memastikan lingkungan pengujian lokal tidak rusak saat pengembang menggabungkan yang terbaru dari repositori proyek
- Memastikan data apa pun diperbarui dengan benar pada versi langsung terlepas dari apakah pengguna masuk atau keluar jika otentikasi digunakan. (Tentu saja jika setiap orang secara otomatis logout saat upgrade dilakukan, maka hanya mengkhawatirkan saat pengguna login diperlukan).
1) Jika perubahan Anda akan membuat semua orang keluar atau waktu henti aplikasi diharapkan, maka cara sederhana untuk melakukannya adalah memiliki skrip migrasi untuk terhubung ke MongoDB lokal atau langsung dan meningkatkan data yang benar. Contoh di mana nama pengguna diubah dari string tunggal menjadi objek dengan nama yang diberikan dan nama keluarga (tentu saja sangat mendasar dan perlu dimasukkan ke dalam skrip untuk dijalankan untuk semua pengembang):
Menggunakan CLI:
mongod
use myDatabase
db.myUsers.find().forEach( function(user){
var curName = user.name.split(' '); //need some more checks..
user.name = {given: curName[0], family: curName[1]};
db.myUsers.save( user );
})
2) Anda ingin aplikasi memigrasikan skema ke atas dan ke bawah berdasarkan versi aplikasi yang dijalankan. Ini jelas akan mengurangi beban untuk server langsung dan tidak memerlukan waktu henti karena hanya memutakhirkan pengguna ketika mereka menggunakan versi yang ditingkatkan/diturunkan untuk pertama kalinya.
Jika Anda menggunakan middleware di Expressjs untuk Nodejs:
- Setel variabel aplikasi di skrip aplikasi root Anda melalui
app.set('schemaVersion', 1)
yang nantinya akan digunakan untuk membandingkan dengan versi skema pengguna. - Sekarang pastikan semua skema pengguna memiliki properti schemaVersion juga sehingga kami dapat mendeteksi perubahan antara versi skema aplikasi dan skema MongoDB saat ini hanya untuk PENGGUNA TERTENTU ITU.
-
Selanjutnya kita perlu membuat middleware sederhana untuk mendeteksi konfigurasi dan versi pengguna
app.use( function( req, res, next ){ //If were not on an authenticated route if( ! req.user ){ next(); return; } //retrieving the user info will be server dependent if( req.user.schemaVersion === app.get('schemaVersion')){ next(); return; } //handle upgrade if user version is less than app version //handle downgrade if user version is greater than app version //save the user version to your session / auth token / MongoDB where necessary })
Untuk upgrade/downgrade saya akan membuat file js sederhana di bawah direktori migrasi dengan fungsi ekspor upgrade/downgrade yang akan menerima model pengguna dan menjalankan perubahan migrasi pada pengguna tertentu di MongoDB. Terakhir, pastikan versi pengguna diperbarui di MongoDB Anda sehingga mereka tidak menjalankan perubahan lagi kecuali mereka pindah ke versi lain lagi.