MongoInternals.RemoteCollectionDriver("mongodb://#{server.ip}:#{server.port}/#{server.dbName}")
如果我调用多个远程MongoDB方法并且如果有相同名称的collecitons,Meteor会抛出类似这样的错误,“collectionName / insert已经存在......”
我认为Meteor在内部创建每个集合的方法,以便控制每个集合,但我需要一次控制几个MongoDB。
我该如何避免这种情况?
此外, 我知道我可以直接使用Npm Mongo驱动程序,而不需要任何NPM包。
var MongoClient = MongoInternals.NpmModules.mongodb.module.MongoClient;
// Connection URL
var url = 'mongodb://localhost:27017/myproject';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, db) {
console.log("Connected correctly to server");
try {
var collection = db.collection('documents');
collection.find({}).toArray(function(err, docs){
console.log(err);
console.log(docs);
});
}
catch(err) {
console.log(err);
}
db.close();
});
但这仍然迫使我用Node.js回调样式控制每个数据库。 有什么想法可以避免这种情况吗?
答案 0 :(得分:4)
我一直在检查这个问题,我找到了办法。
我见过连接几个数据库的解决方案:
storageServerDriver = new MongoInternals.RemoteCollectionDriver("mongodb://ip:port/dbName")
@Collection = new Mongo.Collection("collection", { _driver: storageServerDriver })
但正如您之前提到的,使用两个具有相同名称的集合时,会抛出错误(Meteor内部按名称标识集合,因此它会尝试覆盖已创建的集合的结构)。
无论如何,为了解决这个问题,你可以使用以下hack:
storageServerDriver = new MongoInternals.RemoteCollectionDriver("mongodb://ip:port/dbName")
@CollectionTwo = storageServerDriver.open('collection')