0
var mongodbHost = 'mongodb://localhost:9000/';
var connectionA = require('mongoose').createConnection(mongodbHost + 'A', function(err){
    var schema = require(path.resolve(__dirname, 'migrations', 'v01_00_001', 'models', 'index')).schemas.Serial;
    debugger;
    connectionA.model('Test', schema);
    console.log('First check:', schema.statics.___XXX === connectionA.models.Test.___XXX);
}.bind(this));

var connectionB = require('mongoose').createConnection(mongodbHost + 'B', function(err){
    var schema = require(path.resolve(__dirname, 'models', 'index')).schemas.Serial;  
    debugger;
    connectionB.model('Test', schema);
    console.log('First check:', schema.statics.___XXX === connectionA.models.Test.___XXX);
    console.log('Second check:', schema.statics.___XXX === connectionB.models.Test.___XXX);
}.bind(this));
// output is true, false, false

    // While it should be: true, false, true

私が何をするか知っている人はいますか?問題は、最初の require('mongoose') を実行すると、新しい mongoose インスタンスが取得されるため、残りの require も同じインスタンスを取得することです。そして、マングースは接続間でスキーマを共有します:s

どんな助けでも大歓迎です、ありがとう

4

2 に答える 2

0

https://github.com/LearnBoost/mongoose/issues/1211

var mongooseA = new (require('mongoose').Mongoose)();
var mongooseB = new (require('mongoose').Mongoose)();

次に、接続2接続を作成します。

于 2012-11-15T09:12:53.633 に答える
0

モデルに異なる名前を付けますが、両方に同じコレクション名を使用します。

connectionA.model('TestA', schema, 'Tests');
...
connectionB.model('TestB', schema, 'Tests');
于 2012-11-15T03:38:35.413 に答える