2015-10-02 13 views
7

現在、私は私の接続mongoose.jsため、このコードを持って:接続が必要ですマングース複数の接続は

var mongoose = require('mongoose'); 
var uriUtil = require('mongodb-uri'); 
var mongodbUri = 'mongodb://localhost/db_name'; 
var mongooseUri = uriUtil.formatMongoose(mongodbUri); 
mongoose.connect(mongooseUri); 
module.exports = mongoose; 

ファイルはtest.jsです:

var mongoose = require('../model/mongoose'); 
var schema = mongoose.Schema({...}); 


複数のcoを使用するようにmongoose.jsを更新するにはどうすればよいですかmongoose.createConnection(...)関数との接続?

var mongoose = require('mongoose'); 
mongoose.createConnection('mongodb://localhost/db_name'); 
mongoose.open('localhost'); 
module.exports = mongoose; 

私は「未定義のは関数ではありません」を取得:私はそのような変更を行う際

は、私が唯一つの接続の変更を開始します。 私はこのコードを使用する場合:

var mongoose = require('mongoose'); 
db = mongoose.createConnection('mongodb://localhost/db_name'); 
db.open('localhost'); 
module.exports = mongoose; 

私が手を「エラー:閉じていない接続をオープンしようとすると、」

何かアドバイスを?あなたが別のデータベースへの接続が必要な場合はあなたが増加/減少プール(並列接続数)

ためserver: {poolSize: 5}オプションを使用することができ接続プールを経由して http://mongoosejs.com/docs/connections.html

を接続を処理

答えて

10

マングースはここ Mongoose and multiple database in single node.js project

を見ます

複数接続の例:

var mongoose = require('mongoose') 
var conn = mongoose.createConnection('mongodb://localhost/db1'); 
var conn2 = mongoose.createConnection('mongodb://localhost/db2'); 
var Schema = new mongoose.Schema({}) 
var model1 = conn.model('User', Schema); 
var model2 = conn2.model('Item', Schema); 
model1.find({}, function() { 
    console.log("this will print out last"); 
}); 
model2.find({}, function() { 
    console.log("this will print out first"); 
}); 
+0

mongoose.model('some', mongooseSchema1); mongoose.model('some2', mongooseSchema2); 

見てはい、私は、複数のDB接続が必要です。私はこの答えを見ましたが、私の場合はまだ動作しません。 connとconn2の例が最もよく見えますが、2つのファイルに分けることはできません。あなたは一例を挙げてみてください。 – Pumych

+0

があなたのための実例を追加しました。それはあなたが必要とするものですか? – vmkcom

4

OK。あなたの例で私は自分のニーズに合った解決策を見つけました。

mongoose.js

var mongoose = require('mongoose'); 
mongoose.main_conn = mongoose.createConnection('mongodb://localhost/main'); 
mongoose.admin_conn = mongoose.createConnection('mongodb://localhost/admin'); 
module.exports = mongoose; 

content.js

var mongoose = require('../model/mongoose'); 
var schema = mongoose.Schema({...}); 

/// functions here 
schema.statics.func_a(){...}; 
schema.statics.func_b(){...}; 

// And finaly updated only one line 
//exports.Content = mongoose.model('Content', schema); 
exports.Content = mongoose.main_conn.model('Content', schema); 

唯一のもの、それは、よりエレガントな解決策があるマングースオブジェクトに接続オブジェクトを追加したりすることもOKです。

0

config.jsの

module.exports = { 
    default: 'main', 
    main: 'mongodb://localhost/main', 
    admin: 'mongodb://localhost/admin', 
}; 

connection.js

const mongoose = require('mongoose'); 
const config = require('./config'); 

mongoose.Promise = global.Promise; 

function createConnection(name) { 
    return mongoose.createConnection(config[name]); 
} 

module.exports = createConnection(config[config.default]); 

module.exports.on = createConnection; 

model.js(カスタムクラス)

const connection = require('./connection'); 

class Model { 
    constructor(name, data) { 
     this.data = data; 
     return this.connection().model(name, data.schema); 
    } 

    connection() { 
     if (this.data.connection) { 
      return connection.on(this.data.connection); 
     } 

     return connection; 
    } 
} 

module.exports = Model; 

ユーザー。JS

const Schema = require('mongoose').Schema; 
const conn = require('./connection'); 
const Model = require('./model'); 

const userSchema = new Schema({ 
    name: String, 
    email: String, 
    password: String 
}); 

// USING MONGOOSE MODEL 
// default connection 
const UserM1 = conn.model('User', userSchema); 

// admin connection 
const UserM2 = conn.on('admin').model('User', userSchema); 

// USING CUSTOM MODEL 
// default connection 
const UserC1 = new Model('User', { 
    schema: userSchema 
}); 

// admin connection 
const UserC2 = new Model('User', { 
    schema: userSchema, 
    connection: 'admin' 
}); 
0

あなたは今、あなたはマングースインスタンスのそれぞれにモデルを追加することができ、このよう

var mongoose = require('mongoose'); 
var mongoose2 = new mongoose.Mongoose(); 

それを行うことができます。 DOC here

関連する問題