Mongoose multiple connections

后端 未结 3 1644
别跟我提以往
别跟我提以往 2020-12-01 06:25

Currently I have this code for my connection mongoose.js:

var mongoose = require(\'mongoose\');
var uriUtil = require(\'mongodb-uri\');
var          


        
相关标签:
3条回答
  • 2020-12-01 07:16

    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 (custom class)

    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' 
    });
    
    0 讨论(0)
  • 2020-12-01 07:19

    Mongoose handling connections via connections pool http://mongoosejs.com/docs/connections.html

    You can use server: {poolSize: 5} option for increase/decrease pool (number of parallel connections)

    If you need connections to different databases look here Mongoose and multiple database in single node.js project

    Example of multiple connections:

    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 讨论(0)
  • 2020-12-01 07:22

    OK. With your example I found a solution that fit my needs.

    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);
    

    The only thing, is it OK to add connection objects to mongoose object or may be there is more elegant solution.

    0 讨论(0)
提交回复
热议问题