2015-08-27 54 views
1

我剛剛開始使用Meteor和MongoDB。我想知道是否有辦法一次使用兩個或更多DB。 這些數據庫必須在運行時生成。有多個Mongo DB的流星

這個想法是,我有幾個用戶組,絕對不允許訪問其他用戶組的數據。如果有另一種方式告訴我。

+0

如果您只有一個數據庫,他們爲什麼能夠訪問其他用戶組的數據? – jrenk

+0

他們需要相同的表,並且不允許在客戶端緩存數據(我將它們設置爲離線模式)。你知道我的意思? – Fabic

+0

我並沒有真正解決您的問題。你能更具體一點嗎? – jrenk

回答

0

嗯,我已經做到了......很久以前,但我仍然想在此發佈答案。

你需要的是這樣的:

dbCustomer = new MongoInternals.RemoteCollectionDriver(
    CUSTOMER_DB_URL + customerId 
); 

這樣你創建你在創建一個新的集合使用自定義驅動程序:

Products['procucts' + customerId] = new Meteor.Collection(
    'products' + customerId, 
    { 
     _driver: dbCustomer, 
     idGeneration: 'STRING' 
    } 
); 

那麼,爲什麼我做了這個Products['productus' + customerId]代替如果只是Products

在這裏您必須瞭解客戶端上的MinoMongo db。客戶端不關心你正在使用哪個驅動程序(僅在服務器端使用驅動程序)。設想一下用戶註銷並登錄到其他客戶的情況。現在他正在使用不同的數據庫,但只在服務器上工作。在客戶端上,您仍然只有1個數據庫,其中1個數據庫名稱爲Products。什麼知道?究竟!您既有來自舊客戶的數據,也有來自新客戶的數據。

這不是數據安全問題,但您也會看到兩個數據(顯然是錯誤的)。爲了防止這種情況,您需要客戶端上的2個獨立集合。要達到此目的,請將customerId添加到集合中。

就是這樣。