Ale*_*lls 7 mongoose node.js express
我正在运行 Node.js Express Web 应用程序。
我有两个数据库连接,system_db是用“Mongoose.connect”创建的,user_db是用“Mongoose.createConnection”创建的。这似乎使它们分开并具有不同的连接池。尽管这可能是问题的症结所在。
我有处理 Mongoose 模型的代码
在模型文件中我有:
var authSchema = mongoose.Schema({
teamName: String,
league: String,
players: []
});
var Team = module.exports = mongoose.model('teams',authSchema);
Run Code Online (Sandbox Code Playgroud)
在我的主文件中我有两个连接:
一个是系统数据库
connection_uri = "mongodb://localhost:27017/";
system_db = mongoose.connect(connection_uri.concat("sparks"), {
native_parser : true
}, function(err){
if (err) throw err;
});
Run Code Online (Sandbox Code Playgroud)
另一个是用户数据库
user_db = mongoose.createConnection(connection_uri.concat(user_id));
Run Code Online (Sandbox Code Playgroud)
然后我的主文件中有这段代码,它根据 id 查找 Team 对象:
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();
});
});
Run Code Online (Sandbox Code Playgroud)
问题是上面的 app.param 函数没有找到任何团队匹配项,即使它们存在于 user_db 数据库的集合中。这意味着,我认为我的模型以某种方式指向了错误的数据库?不知何故,它必须指向此 system_db 而不是 user_db。这可能是对的吗?我该如何解决这个问题?
下面的方法打开到 的连接system_db并绑定到该mongoose对象,即修改当前的 mongoose 对象。返回类型不是.Connection
system_db = mongoose.connect(connection_uri.concat("sparks")...
Run Code Online (Sandbox Code Playgroud)
现在当你再次这样做时:
user_db = mongoose.createConnection(connection_uri.concat(user_id));
Run Code Online (Sandbox Code Playgroud)
这将创建一个新的数据库连接user并返回一个连接,但不会修改mongoose实例。猫鼬实例仍然绑定到system_db数据库连接。
由于 Team 模型是从同一个 mongoose 实例获取的,
var Team = mongoose.model('teams',authSchema);
Run Code Online (Sandbox Code Playgroud)
无论对此执行什么操作,model都会有效地发生在connectionmongoose 实例所持有的数据库中system_db。
所以你需要从连接中获取模型user_db:
var user_db = mongoose.createConnection(..);
// retrieve the Team model
var Team= user_db.model('teams'); // not from mongoose instance.
Run Code Online (Sandbox Code Playgroud)
createConnection在您想要获得连接的任何地方使用。
| 归档时间: |
|
| 查看次数: |
10798 次 |
| 最近记录: |