160

サブプロジェクトを含む Node.js プロジェクトを実行しています。1 つのサブ プロジェクトには 1 つの Mongodb データベースがあり、Mongoose は db のラップとクエリに使用されます。しかし、問題は

  • モデルは 1 つの接続で構築されるため、Mongoose では単一の mongoose インスタンスで複数のデータベースを使用することはできません。
  • 複数の mongoose インスタンスを使用するために、Node.js にはキャッシュ システムがあるため、複数のモジュール インスタンスは許可されませんrequire()。Node.js でモジュールのキャッシュを無効にすることは知っていますが、マングースにのみ必要なため、良い解決策ではないと思います。

    マングースでcreateConnection()andを使用しようとしましたが、解決策ではありませんでした。openSet()

    新しいマングース インスタンスをサブ プロジェクトに渡すために、マングース インスタンス ( http://blog.imaginea.com/deep-copy-in-javascript/ )をディープ コピーしようとしましたが、 RangeError: Maximum call stack size exceeded.

とにかく、マングースで複数のデータベースを使用する方法や、この問題の回避策があることを知りたいですか? マングースはとても簡単で速いと思うからです。または推奨事項として他のモジュールはありますか?

4

6 に答える 6

248

細かいマニュアルによると、複数のデータベースに接続するために使用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' }
}));

それらの間でスキーマを共有できると確信していますが、確認する必要があります。

于 2013-10-20T08:15:52.720 に答える
50

できることの 1 つは、プロジェクトごとにサブフォルダーを作成することです。したがって、そのサブフォルダーに mongoose をインストールし、各サブ アプリケーションの独自のフォルダーから mongoose を require() します。プロジェクト ルートまたはグローバルからではありません。したがって、1 つのサブ プロジェクト、1 つの mongoose インストール、および 1 つの mongoose インスタンスです。

-app_root/
--foo_app/
---db_access.js
---foo_db_connect.js
---node_modules/
----mongoose/
--bar_app/
---db_access.js
---bar_db_connect.js
---node_modules/
----mongoose/

foo_db_connect.js 内

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/foo_db');
module.exports = exports = mongoose;

bar_db_connect.js 内

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/bar_db');
module.exports = exports = mongoose;

db_access.js ファイル内

var mongoose = require("./foo_db_connect.js"); // bar_db_connect.js for bar app

これで、mongoose を使用して複数のデータベースにアクセスできるようになりました。

于 2013-10-20T08:14:09.823 に答える