我正在使用此lib构建Meteor Web API ,该Web API的功能之一是它必须能够基于来自Meteor客户端的Web请求连接多个数据库中的任何一个。
。
我知道现在可以通过此SO答案(仅通过Meteor.js使用多个Mongodb数据库)从一个仅服务器端流星应用程序连接到多个数据库:
现在可以连接到远程/多个数据库:
var database = new MongoInternals.RemoteCollectionDriver("<mongo url>");
MyCollection = new Mongo.Collection("collection_name", { _driver: database });
但是,如果两个数据库中的集合名称相同,这行得通吗?数据库基本上是副本,当然具有不同的MONGO_URL和不同的数据。
。
例如:
(1)来自客户端的Web请求将进入Meteor Web API。该请求将包含指定数据库ID = 2的数据。我将查找该ID并将其与数据库URL匹配。我将连接到该数据库并输入集合名称“ People”,然后对该数据进行处理。
。
(2)来自不同客户端的另一个Web请求进入Meteor Web API。这次使用数据库ID = 4,Web应用程序将查找数据库并连接到另一个不同的URL,并提取相同的集合名称“人”,但是这次当然具有不同的数据(当然是因为这是一个不同的数据库)。
。
可以使用相同的集合名称吗?如果是这样,那将如何工作?另外,如果我同时有两个不同数据库的两个请求怎么办?
您应该定义什么是“集合名称”。
因此,在这段代码中:
const database = new MongoInternals.RemoteCollectionDriver("<mongo url 1>");
const MyCollection = new Mongo.Collection("collection_name", { _driver: database });
const database2 = new MongoInternals.RemoteCollectionDriver("<mongo url 2>");
const MyCollection2 = new Mongo.Collection("collection_name", { _driver: database2 });
从您的“流星应用”的观点,MyCollection
并且MyCollection2
是两个不同的JavaScript常量,因此两个不同的“流星集合”。根据javascript的工作方式,它们的名称不能相同。
但是,由于它们连接到两个不同的数据库,并且不同的数据库完全不同(除非两个mongo url字符串相同),所以它们的“数据库集合”名称可以相同。它们仍然是两个不同数据库中的两个不同集合。
从数据库的角度来看,并发也不重要。他们可以响应并发数据库调用,因为它们是不同的数据库。但是,同样,您的javascript应用程序代码必须能够管理此并发并处理其结果和异常,因为javascript不是线程化的,而是事件化的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句