我刚刚开始使用Meteor和MongoDB。我想知道是否有一种方法可以同时使用两个或更多db。这些db必须在运行时生成。
这个想法是,我有几个用户组,绝对不允许访问其他用户组的数据。如果有别的办法,请告诉我。
我已经做到了…很久以前,但我仍然想把答案贴在这里。
你需要的是这样的东西:
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数据库。客户端并不关心您使用的是哪个驱动程序(仅在服务器端使用驱动程序)。假设一个用户注销并登录到另一个客户。现在他正在使用一个不同的数据库,但只在服务器上。在客户机上,您仍然只有一个数据库和一个名为Products
的集合。知道什么?完全正确!您有两个数据,一个来自老客户,另一个来自新客户。
这不是数据安全问题,但您也将看到两个数据(这显然是错误的)。为了防止这种情况,您需要在客户端上进行2个单独的集合。要实现这一点,您需要将customerId
添加到集合中。
。