복붙노트

[MONGODB] 다중 연결을 몽구스

MONGODB

다중 연결을 몽구스

현재 내 연결 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({...});

어떻게 mongoose.createConnection (...) 함수를 사용하여 여러 개의 연결을 사용하는 mongoose.js를 업데이트 할 수 있습니다?

난 단지 내가 그런 변화를 할 하나의 연결을위한 변화를 시작합니다

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

받을 I "정의되지 않은 함수 아니다". 이 코드를 사용하는 경우 :

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

나는 "오류 : 열려 닫히지 않은 연결을 시도"GET

어떤 충고?

해결법

  1. ==============================

    1.연결 풀을 통해 연결을 처리 몽구스 http://mongoosejs.com/docs/connections.html

    연결 풀을 통해 연결을 처리 몽구스 http://mongoosejs.com/docs/connections.html

    {poolSize : 5} 당신은 서버에서 사용할 수 증가 / 감소 풀 옵션 (병렬 연결의 수)

    서로 다른 데이터베이스에 연결을해야하는 경우 이쪽을 봐주세요 몽구스 단일 Node.js를 프로젝트에서 여러 데이터베이스

    다중 연결의 예 :

    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");
    });
    
  2. ==============================

    2.확인. 귀하의 예제와 함께 내 요구에 맞는 솔루션을 발견했다.

    확인. 귀하의 예제와 함께 내 요구에 맞는 솔루션을 발견했다.

    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 객체를 몽구스에 연결 개체를 추가하거나 더 우아한 해결책이 될 수있다.

  3. ==============================

    3.config.js

    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;
    

    의 user.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' 
    });
    
  4. from https://stackoverflow.com/questions/32906467/mongoose-multiple-connections by cc-by-sa and MIT license