在Meteor.js中,使用具有相同集合名称

时间:2016-02-01 07:05:43

标签: mongodb meteor

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

1 个答案:

答案 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')