gpt4 book ai didi

mongodb - 在 Meteor.js 中,使用多个具有相同集合名称的 MongoInternals.RemoteCollectionDriver

转载 作者:可可西里 更新时间:2023-11-01 09:13:01 28 4
gpt4 key购买 nike

MongoInternals.RemoteCollectionDriver("mongodb://#{server.ip}:#{server.port}/#{server.dbName}")

如果我调用多个远程 MongoDB 方法并且如果有同名的集合,Meteor 会抛出类似这样的错误,“collectionName/insert is already exist...”

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

最佳答案

我一直在检查这个问题,我找到了一种方法。

我看到的连接多个数据库的解决方案是:

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

关于mongodb - 在 Meteor.js 中,使用多个具有相同集合名称的 MongoInternals.RemoteCollectionDriver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35124719/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com