6

我正在尝试将 Meteor 连接到现有的 MongoDB。我无法复制数据库或更改其名称,因为它已被其他应用程序使用。

我知道我必须设置一个MONGO_URL环境变量来连接它。但是,在我设置之后,Meteor 并没有连接到指定的 MongoDB 数据库。我尝试做 a.find()但它不返回任何文档。Web 控制台中的一个.insert()显示页面中的信息,但它不会插入到数据库中。以下是代码:

$ echo $MONGO_URL
mongodb://localhost:27017/autana_dev

./lib/models.js

Posts = new Meteor.Collection('posts');

./server/app.js

Meteor.publish('posts', function() {
  return Posts.find();
});

./client/app.js

Meteor.subscribe('posts');

Template.main.posts = function() {
  return Posts.find();
};

任何想法?任何人?我的 Meteor 版本 release 是 0.6.4.1,MongoDB 版本是 2.4.1。

更新:7 月 28 日运行流星后meteor run,我在项目目录中打开了一个新的控制台窗口来运行流星 mongo 控制台。但是,运行后meteor mongo我收到以下信息:

mongo: Meteor isn't running.

This command only works while Meteor is running your application
locally. Start your application first.
4

4 回答 4

3

如您所知,因为您发布了问题,所以这是流星中的一个错误。

我的解决方法是使用标准 mongo 客户端连接到我的 mongodb。您可以通过查看文件找到您的数据库正在运行的端口yourapp/.meteor/db/METEOR-PORT,然后运行mongo localhost:[put that port number here]​​.

于 2014-04-29T07:13:44.393 回答
0

您确定问题是 Meteor 没有连接到数据库吗?这里有几个必须一起工作的部分。我没有看到任何明显的错误,但我会简化代码以验证问题是否在您认为的位置。

例如,尝试将 console.log(Posts.find()) 添加到服务器上的 Meteor.startup。

于 2013-07-29T15:09:49.207 回答
0

我假设你在 Linux 或 Mac 上运行 Meteor。如果不是这种情况,代码可能无法正常工作。

最明显的原因是 mongo 数据库不包含任何posts文档。什么是输出:

$ mongo
> use autana_dev
> db.posts.find({}).count()

如果输出不是null,或者0您可能需要使用用户名和密码进行连接。

export MONGO_URL="mongodb://user:password@localhost:27017/autana_dev

如果这没有帮助,我会尝试添加一些日志记录以查明是否未发送或未收到帖子:

Meteor.publish('posts', function() {
   console.log("returning " + Posts.find({}).count() + " posts");
   return Posts.find();
});

如果数字大于0客户端

var postsHandle = Meteor.subscribe('posts');

Template.main.posts = function() {
  if( postsHanlde.ready() ){
    console.log("I have " + Posts.find({}).count() + " posts on the client");
    return Posts.find();
  }
};

该条件if( postsHanlde.ready() )可确保您在帖子到达之前不会尝试显示帖子。

如果您的 mongodb 中有文档,但在 Meteor 中没有选择任何内容,则可能是您的 mongodb 工作不正常。

通过用在线解决方案替换 mongodb 来检查这一点相当容易。在mongolab上创建一个免费帐户,并将您的 MONGO_URL 更改为 mongolab 控制台提供的那个。在那里插入一些帖子并再次测试。

如果您仍然没有收到任何文件,那么...

这就是我从你的输入中所能想到的。希望它有所帮助。

于 2013-07-31T11:27:30.127 回答
0

首先,在一个 shell 的窗口中运行 mongo

然后只需在拳头仍在运行时在另一个 shell 的窗口中运行“meteor mongo”!在我的 Mac 上,在“排行榜示例”中,我是这样做的:

  1. “流星跑排行榜”
  2. "cd .meteor/leaderboard;meteor mongo"
于 2013-11-25T06:54:46.633 回答