2016-02-01 66 views
4
MongoInternals.RemoteCollectionDriver("mongodb://#{server.ip}:#{server.port}/#{server.dbName}") 

如果我调用多个远程MongoDB的方法,如果有同名collecitons,流星引发错误这样的事情,“集合名/插入是已经存在...“在Meteor.js,使用具有相同的集合名称多MongoInternals.RemoteCollectionDriver

我想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回调风格控制每个数据库。 有什么想法可以避免这种情况吗?

回答

4

我一直在检查这个问题,并且我找到了一个办法。

我见过连接多个数据库,其中的解决方案:

storageServerDriver = new MongoInternals.RemoteCollectionDriver("mongodb://ip:port/dbName") 

@Collection = new Mongo.Collection("collection", { _driver: storageServerDriver }) 

但正如你前面提到的,有两个集合有相同的名字,一个错误被抛出(内部流星他们的名字标识的集合,所以它试图覆盖已经创建的集合的结构)。

总之,要解决这个问题,你可以使用下面的技巧:

storageServerDriver = new MongoInternals.RemoteCollectionDriver("mongodb://ip:port/dbName") 

@CollectionTwo = storageServerDriver.open('collection') 
+0

我不断收到未捕获的ReferenceError:MongoInternals没有定义我应该怎么办? – Orozcorp