Saya melakukan proyek Node.js yang berisi sub proyek. Satu sub proyek akan memiliki satu database Mongodb dan Mongoose akan digunakan untuk membungkus dan menanyakan db. Tapi masalahnya adalah
- Mongoose tidak mengizinkan untuk menggunakan banyak database dalam satu instance luwak karena modelnya dibangun di satu koneksi.
Untuk menggunakan beberapa instance luwak, Node.js tidak mengizinkan beberapa instance modul karena memiliki sistem cache
require()
. Saya tahu menonaktifkan caching modul di Node.js tetapi saya pikir ini bukan solusi yang baik karena hanya perlu untuk luwak.Saya sudah mencoba menggunakan
createConnection()
danopenSet()
di luwak, tapi itu bukan solusinya.Saya telah mencoba untuk menyalin contoh luwak ( http://blog.imaginea.com/deep-copy-in-javascript/ ) untuk meneruskan contoh luwak baru ke sub proyek, tetapi itu melempar
RangeError: Maximum call stack size exceeded
.
Saya ingin tahu apakah ada cara untuk menggunakan banyak database dengan luwak atau solusi apa pun untuk masalah ini? Karena menurut saya luwak cukup mudah dan cepat. Atau modul lain sebagai rekomendasi?
useDb
perintah yang menggunakan kumpulan koneksi yang sama.Menurut manual halus ,
createConnection()
dapat digunakan untuk menghubungkan ke beberapa database.Namun, Anda perlu membuat model terpisah untuk setiap koneksi / database:
Saya cukup yakin Anda dapat membagikan skema di antara mereka, tetapi Anda harus memeriksa untuk memastikannya.
sumber
useDb()
tersedia dalam 3.8 untuk berbagi kumpulan koneksi yang mendasarinya: github.com/LearnBoost/mongoose/wiki/…var newSchema = new mongoose.Schema({ ... })
,var model2 = conn1.model('newModel', newSchema)
,var model2 = conn2.model('newModel', newSchema)
Cukup terlambat tetapi ini mungkin membantu seseorang. Jawaban saat ini mengasumsikan Anda menggunakan file yang sama untuk koneksi dan model Anda.
Dalam kehidupan nyata, ada kemungkinan besar Anda memecah model Anda menjadi file yang berbeda. Anda dapat menggunakan sesuatu seperti ini di file utama Anda:
seperti yang dijelaskan di dokumen. Dan kemudian di file model Anda, lakukan sesuatu seperti berikut:
Dimana myDB adalah nama database Anda.
sumber
test
, dan juga untuk menghindari memiliki banyak koneksi. Namun, saya juga.db
di akhir (const v1 = mongoose.connection.useDb('test').db
) karena db lama tidak perlu dikelola luwak.Sebagai pendekatan alternatif, Mongoose mengekspor konstruktor untuk instance baru pada instance default. Jadi hal seperti ini mungkin terjadi.
Ini sangat berguna saat bekerja dengan sumber data terpisah, dan juga saat Anda ingin memiliki konteks database terpisah untuk setiap pengguna atau permintaan. Anda harus berhati-hati, karena memungkinkan untuk membuat BANYAK koneksi saat melakukan ini. Pastikan untuk memanggil disconnect () ketika instance tidak diperlukan, dan juga untuk membatasi ukuran kumpulan yang dibuat oleh setiap instance.
sumber
await instance1.connection.collection('foo').insert({ foo: 'bar', }) await instance2.connection.collection('foo').insert({ foo: 'zoo', })
Solusi yang sedikit dioptimalkan (bagi saya setidaknya). tulis ini ke file db.js dan minta ini ke mana pun diperlukan dan panggil dengan pemanggilan fungsi dan Anda siap melakukannya.
sumber