我刚开始使用Meteor和MongoDB。我想知道是否有一种方法可以同时使用两个或更多DB。 这些DB必须在运行时生成。
我的想法是我有一些用户组绝对不允许访问其他用户组的数据。如果有另一种方式告诉我。
答案 0 :(得分: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数据库。客户端不关心您使用的是哪个驱动程序(仅在服务器端使用驱动程序)。想象一下用户注销并登录到另一个客户的情况。现在他正在使用不同的数据库但仅在服务器上。在客户端上,您仍然只有1个数据库,其中包含1个名为Products
的集合。什么知道的?究竟!您拥有来自旧客户的数据和来自新客户的数据。
这不是数据安全问题,但你也会看到这两个数据(这显然是错误的)。为防止这种情况,您需要在客户端上有两个单独的集合要实现此目的,请将customerId
添加到集合中。
就是这样。