繁体   English   中英

告诉 Mongoose 使用哪个数据库 - 在 node.js Express 应用程序中

[英]Telling Mongoose which database to use - in a node.js Express application

我有一个 Node.js Express web 应用程序正在运行。

我有两个数据库连接,system_db 是用“Mongoose.connect”创建的,user_db 是用“Mongoose.createConnection”创建的。 这似乎使它们分开并具有不同的连接池。 虽然这可能是问题的症结所在。

我有处理 Mongoose model 的代码

在 model 文件中我有:

var authSchema = mongoose.Schema({
    teamName: String,
    league: String,
    players: []

});


var Team = module.exports = mongoose.model('teams',authSchema);

在我的主文件中,我有两个连接:

一个是系统数据库

connection_uri = "mongodb://localhost:27017/";
system_db = mongoose.connect(connection_uri.concat("sparks"), {
    native_parser : true
}, function(err){
    if (err) throw err;
});

另一个是用户数据库

 user_db = mongoose.createConnection(connection_uri.concat(user_id));

然后我的主文件中有这段代码,它根据 id 找到了一个团队 object:

app.param('team_id', function(req, res, next, team_id) {

    Team.findOne(team_id, function(err, team) {

        if (err) {
            return next(err);
        }
        if (!team) {
            throw new Error("no team matched");
        }
        req.team = team;
        next();
    });
});

问题是上面的 app.param function 没有为团队找到任何匹配项,即使它们存在于 user_db 数据库的集合中。 这意味着,我认为我的 model 不知何故指向了错误的数据库? 它必须以某种方式指向此 system_db 而不是 user_db。 这是对的吗? 我该如何解决?

下面的方法打开一个到system_db的连接并绑定到mongoose对象,即当前的 mongoose 对象被修改。 返回类型不是Connection

system_db = mongoose.connect(connection_uri.concat("sparks")...

现在当你再次这样做时:

user_db = mongoose.createConnection(connection_uri.concat(user_id));

这将创建一个到user数据库的Connection 并返回一个connection ,但不会修改mongoose实例。 mongoose 实例仍然绑定到system_db数据库连接。

由于 Team 模型是从同一个 mongoose 实例中获得的,

var Team = mongoose.model('teams',authSchema);

在这个model上执行的任何操作都有效地发生在 mongoose 实例所持有的connection中,即system_db数据库的连接中。

所以你需要从user_db连接中获取模型:

var user_db = mongoose.createConnection(..);
// retrieve the Team model
var Team= user_db.model('teams'); // not from mongoose instance.

在您想获得连接的任何地方使用createConnection

它正在建模多租户数据库,伙计们

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM