2015-05-04 81 views
0

我正在爲使用Meteor和MongoDB的員工創建一個應用程序。這個應用程序將被多個組織使用。所以我會爲每個組織製作一個單獨的數據庫。我在流星中遇到了一個關於如何將數據庫名稱和集合名稱保存爲變量的問題。數據庫名稱將在登錄時決定。然後我會保留DB名稱Session
集合名稱也可以是一個變量。如何將數據庫名稱作爲變量

例如:

var dbName = Session.get("dbName"); //for eg dbName="redex" 
var collectionName = Session.get("collectionName"); // for ex collectionName="employees" 
Employees = new Mongo.Collection(collectionName); 

如何管理在這種情況下,變量?

回答

0

您必須創建一個server methodcreates a given database根據dbNamecollectionName參數:

'newDatabase': function (dbName, collectionName) { 
    var d = new MongoInternals.RemoteCollectionDriver(process.env.MONGO_URL.replace("originDB", dbName)); 
    Employees = new Mongo.Collection(collectionName, { _driver: d }); 
} 

您還必須聲明你的客戶端是新的集合:

Meteor.call('newDatabase', Session.get("dbName"), Session.get("collectionName"), function (err, res) { 
    if (!err) 
    Employees = new Mongo.Collection(Session.get("collectionName")); 
}); 
+0

謝謝。它的工作。但有一個問題。我不能在不同的數據庫中使用相同的集合名稱。 調用方法'connectNewDatabase'時出現異常錯誤:名爲'/ employees/insert'的方法已在函數._。中的每個._。forEach(packages/ddp/livedata_server.js:1461:1 )處定義爲 。下劃線/ underscore.js:113:1) –

+0

根據[這個答案](http://stackoverflow.com/a/25915025/1439597),你沒有什麼可以做的,但解決這個問題... – SylvainB

+0

this意味着我們需要具有唯一的集合名稱,例如,如果數據庫名稱是redix,那麼集合名稱將是redix.employees,如果數據庫名稱是apl,則使用apl.employees –