MongoInternals.RemoteCollectionDriver("mongodb://#{server.ip}:#{server.port}/#{server.dbName}")
Run Code Online (Sandbox Code Playgroud)
如果我调用多个远程 MongoDB 方法并且如果有同名的集合,Meteor 会抛出类似这样的错误,“collectionName/insert is already existing...”
我认为 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();
});
Run Code Online (Sandbox Code Playgroud)
但这仍然迫使我使用 Node.js 回调样式来控制每个数据库。有什么想法可以避免这种情况吗?
我一直在检查这个问题,我找到了一种方法。
我见过的连接多个数据库的解决方案,其中:
storageServerDriver = new MongoInternals.RemoteCollectionDriver("mongodb://ip:port/dbName")
@Collection = new Mongo.Collection("collection", { _driver: storageServerDriver })
Run Code Online (Sandbox Code Playgroud)
但是正如您之前提到的,对于两个同名的集合,会引发错误(Meteor 在内部通过名称识别集合,因此它会尝试覆盖已创建的集合的结构)。
无论如何,要解决此问题,您可以使用以下技巧:
storageServerDriver = new MongoInternals.RemoteCollectionDriver("mongodb://ip:port/dbName")
@CollectionTwo = storageServerDriver.open('collection')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1419 次 |
| 最近记录: |