我有三个数据库,即 main_db 它是默认的加载数据库。登录后我想要加载数据库。 数据库是: -
main_db
- > user_collection
psm_2017_db
- > abc_collection
- > xyz_collection
psm_2018_db
- > abc_collection
- > xyz_collection
这是我的项目结构
这是我的登录脚本。
client
|->login
|->login.js
Template.login.rendered = function(){
SessionStore.set("login_user",false);
};
Template.login.events({
'submit #formLogin': function (event, target){
event.preventDefault();
var email = target.find('#loginEmail').value;
var password = target.find('#loginPassword').value;
// console.log(email +" "+password);
Meteor.loginWithPassword(email, password, function(err){
if(err){
console.log(err);
alert("Invalid Login!");
}
else {
SessionStore.set("login_user",true);
console.log('successfully')
Router.go("/dashboard")
}
});
}
});
Template.layout.helpers({
"isLoggedin": function () {
return SessionStore.get("login_user");
}
});
这是我的加载集合文件
lib
|->collection.js
abcCollection=new Mongo.Collection("abc_collection");
xyzCollection=new Mongo.Collection("xyz_collection");
答案 0 :(得分:3)
您可以使用以下方法连接到多个dbs。
var database = new MongoInternals.RemoteCollectionDriver("<<mongo url>>");
MyCollection = new Mongo.Collection("collection_name", { _driver: database });
<<mongo_url>>
是您的标准mongodb网址。
例如。 mongodb://127.0.0.1:27017/database_name
现在,在您的特定场景中,main_db
包含用户集合(我假设这与流星用户集合有关)。你需要随时加载它。登录后您无法加载它,因为用户信息 - 登录所需的信息驻留在该数据库中!
完成上述操作后,可以在登录时连接剩余的两个dbs,如下所示:
/lib/dbconnection.js
(这对于服务器和clinet都是通用的)
Meteor.methods({
loadDB: function(){
if(Meteor.userId()){ // if a user has logged in
var database = new MongoInternals.RemoteCollectionDriver("<<mongo url>>");
MyCollection = new Mongo.Collection("collection_name", { _driver: database });
}
}
})
Meteor.call("loadDB");
每次用户登录时都会调用 loadDB
。但我担心每次任何用户登录时都会运行它。为了避免重新初始化它每个用户登录时,您可能需要检查database
或myCollection
是否已存在。