流星数据库连接

Joe*_*dee 6 mongodb meteor

我正在尝试连接我的Mongo数据库,它位于机器上作为我的Meteor应用程序.以下是我的应用中的两个文件:

a.js:

if (Meteor.isServer) {

    var database = new MongoInternals.RemoteCollectionDriver("mongodb://127.0.0.1:3001/meteor");
    Boxes = new Mongo.Collection("boxes", { _driver: database });
    Meteor.publish('boxes', function() {
        return Boxes.find(); 
    }); 
}
Run Code Online (Sandbox Code Playgroud)

b.js:

if (Meteor.isClient) {
    Meteor.subscribe('boxes');
    Template.homeCanvasTpl.helpers({
        boxes: function () {
            return Boxes.find({});
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

但我不断得到一个"模板助手中的异常:ReferenceError:Boxes未定义"错误 - 任何想法?

Ste*_*han 17

如何使用Meteor连接到MongoDB?

场景A:默认使用内置数据库

这比你做的简单得多.当你运行时meteor,实际上启动了一个带有Meteor服务器的数据库,其中Meteor监听端口3000和端口3001上的数据库.Meteor应用程序已经在端口3001连接到该数据库并使用名为db的数据库meteor.没有必要回头MongoInternals.RemoteCollectionDriver.只需删除该代码并将内容更改为:

 Boxes = new Mongo.Collection("boxes"); // use default MongoDB connection
Run Code Online (Sandbox Code Playgroud)

方案B:默认使用其他数据库

使用MONGO_URL环境变量,您可以在启动Meteor服务器时将连接字符串设置为MongoDB.您可以准确指定连接的位置和方式,而不是本地端口3001数据库或未经身份验证的连接.像这样启动Meteor服务器:

$ MONGO_URL=mongodb://user:password@localhost:27017/meteor meteor
Run Code Online (Sandbox Code Playgroud)

user:password@如果不需要身份验证,您也可以省略命令的一部分.

场景C:从同一个Meteor应用程序连接到第二个(第3个等)数据库

现在我们需要使用MongoInternals.RemoteCollectionDriver.如果您希望使用另一个不是启动Meteor服务器时定义的默认数据库的数据库,您应该使用您的方法.

var database = new MongoInternals.RemoteCollectionDriver('mongodb://user:password@localhost:27017/meteor');
var numberOfDocs = database.open('boxes').find().count();
Run Code Online (Sandbox Code Playgroud)

奖励:你为什么要使用不MongoInternalsMongo.Collection

正如文档所示,您不应将任何Mongo连接传递给该new Mongo.Collection()命令,而只应传递给另一个Meteor实例的连接.这意味着,如果您使用DDP.connect连接到不同的服务器,您可以使用您的代码 - 但您不应该混合MongoInternals使用Mongo.Collection- 它们不能很好地协同工作.


sai*_*unt 0

Meteor 有 2 个不同的环境:运行在 Node.JS 上的服务器环境和运行在浏览器中的客户端环境。

Boxes在您的代码中,您仅在服务器环境中声明Mongo 集合,您需要将此声明从Meteor.isServer条件中删除(顺便说一句,不要使用这些,将您的代码分隔在server/,client/lib/目录中)。

另外,不确定您是否需要以这种方式连接到 MongoDB,也许您应该查看MONGO_URL环境变量,它可能已经满足您的需要了?(提供到远程(或本地)Mongo 服务器的 mongo 连接 URL)。