2 Meteor.Collections是否可以从2个不同的mongdb数据库服务器中检索数据?
Meteor.Collections
Dogs = Meteor.Collection('dogs') // mongodb://192.168.1.123:27017/dogs Cats = Meteor.Collection('cats') // mongodb://192.168.1.124:27017/cats
现在可以连接到远程/多个数据库:
var database = new MongoInternals.RemoteCollectionDriver("<mongo url>"); MyCollection = new Mongo.Collection("collection_name", { _driver: database });
<mongo_url>mongodb url 在哪里,例如mongodb://127.0.0.1:27017/meteor(带有数据库名称)
<mongo_url>
mongodb://127.0.0.1:27017/meteor
目前,这样做有一个缺点:没有Oplog
目前这是不可能的。每个流星应用程序都绑定到一个数据库。
有几种方法可以解决此问题,但其价值可能更复杂:
在另一个流星应用程序中(例如在同一台计算机上的端口6000上运行)。您仍然可以具有反应性,但是您需要通过方法调用代理插入,删除和更新
服务器:
Cats = Meteor.Collection('cats') Meteor.publish("cats", function() { return Cats.find(); }); Meteor.methods('updateCat, function(id, changes) { Cats.update({_id: id}, {$set:changes}); });
您当前的Meteor应用:
var connection = DDP.connect("http://localhost:6000"); connection.subscribe("cats"); Cats = Meteor.Collection('cats', {connection: connection}); //To update a collection Cats.call("updateCat", <cat_id>, <changes);
这使用了节点js mongodb本机驱动程序。
就像在其他任何节点js应用程序中一样,这将连接到数据库。
有 没有 可用的反应,你不能使用new Meteor.Collection类型的集合。
new Meteor.Collection
var mongodb = Npm.require("mongodb"); //or var mongodb = Meteor.require("mongodb") //if you use npm package on atmosphere var db = mongodb.Db; var mongoclient = mongodb.MongoClient; var Server = mongodb.Server; var db_connection = new Db('cats', new Server("127.0.0.1", 27017, {auto_reconnect: false, poolSize: 4}), {w:0, native_parser: false}); db.open(function(err, db) { //Connected to db 'cats' db.authenticate('<db username>', '<db password>', function(err, result) { //Can do queries here db.close(); }); });