私はサブプロジェクトを含むNode.jsプロジェクトを行っています。1つのサブプロジェクトには1つのMongodbデータベースがあり、Mongooseはデータベースのラップとクエリに使用されます。しかし、問題は
- Mongoose では、モデルが 1 つの接続で構築されるため、単一の Mongoose インスタンスで複数のデータベースを使用することはできません。
複数の mongoose インスタンスを使用する場合、Node.js にはキャッシュ システムがあるため、複数のモジュール インスタンスは許可されません
require()
。Node.js でモジュール キャッシュを無効にすることは知っていますが、これは mongoose にのみ必要なため、良い解決策ではないと思います。createConnection()
私は mongoose でと を使用しようとしましたopenSet()
が、解決にはなりませんでした。私はマングースインスタンスをディープコピーしようとしました(http://blog.imaginea.com/deep-copy-in-javascript/) を使用してサブプロジェクトに新しい mongoose インスタンスを渡そうとしましたが、 がスローされました
RangeError: Maximum call stack size exceeded
。
この問題を回避するために、mongoose で複数のデータベースを使用する方法や回避策があるかどうかを知りたいです。mongoose は非常に簡単で高速だと思うからです。または、他に推奨されるモジュールはありますか?
ベストアンサー1
によると素晴らしいマニュアル、createConnection()
できる複数のデータベースに接続するために使用されます。
ただし、接続/データベースごとに個別のモデルを作成する必要があります。
var conn = mongoose.createConnection('mongodb://localhost/testA');
var conn2 = mongoose.createConnection('mongodb://localhost/testB');
// stored in 'testA' database
var ModelA = conn.model('Model', new mongoose.Schema({
title : { type : String, default : 'model in testA database' }
}));
// stored in 'testB' database
var ModelB = conn2.model('Model', new mongoose.Schema({
title : { type : String, default : 'model in testB database' }
}));
それらの間でスキーマを共有できることはほぼ確実ですが、確認する必要があります。