База данных изменений метеоров во время выполнения

1

У меня три базы данных, т. Е. Main_db - база данных нагрузки по умолчанию. Я хочу загрузить базу данных после входа в систему. База данных: -

main_db

→ user_collection

psm_2017_db

→ abc_collection

→ xyz_collection

psm_2018_db

→ abc_collection

→ xyz_collection

Вот моя структура проекта

Изображение 174551

вот мой сценарий входа.

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");
Теги:
meteor

1 ответ

2
Лучший ответ

Вы можете подключиться к нескольким dbs, используя подход ниже.

var database = new MongoInternals.RemoteCollectionDriver("<<mongo url>>");
MyCollection = new Mongo.Collection("collection_name", { _driver: database });

<<mongo_url>> - ваш стандартный URL-адрес mongodb. Например. mongodb://127.0.0.1:27017/database_name

Теперь в вашем конкретном сценарии main_db содержит коллекцию пользователей (я полагаю, что это относится к коллекции метеоритов). Вы должны постоянно загружать его. Вы не можете загрузить его после входа в систему, поскольку информация пользователя - которая требуется для входа в систему, находится в этом db!

Как только вы позаботитесь об этом выше, подключение к остальным двум dbs можно сделать при входе в систему, как показано ниже:

/lib/dbconnection.js (это будет распространено как на сервере, так и на клиенте)

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 уже существует.

  • 0
    Я хочу загружать базу данных динамически. например, mongodb://127.0.0.1:27017/<dbNameVar>
  • 0
    Я полагаю, вы можете обернуть его в функцию и вызвать его, когда пользователь входит в систему? Это должно существовать совместно с клиентом и сервером.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню