2016-02-01 99 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