Meteor无法连接到MongoDB

时间:2013-07-26 16:10:56

标签: mongodb meteor

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

我知道I have to set a MONGO_URL environment var要与之联系。但是,在我设置它之后,Meteor没有连接到特定的MongoDB数据库。我尝试了.find(),但它没有返回任何文档。 Web控制台中的.insert()显示页面中的信息,但不会插入数据库中。以下是代码:

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

./ LIB / models.js

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

./服务器/ app.js

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

./客户/ app.js

Meteor.subscribe('posts');

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

有什么想法吗?任何人?我的Meteor版本是0.6.4.1,MongoDB版本是2.4.1。

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

mongo: Meteor isn't running.

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

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我假设您在Linux或Mac上运行Meteor。如果不是这种情况,代码可能无效。

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

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

如果输出不是null0,则可能需要使用用户名和密码进行连接。

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控制台提供的帐户。在那里插入一些帖子并再次测试。

如果你还没有得到任何文件,那么......

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

答案 3 :(得分:0)

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

然后在拳头还在运行时,只需在另一个炮弹的窗户上运行“meteor mongo”! 在我的Mac上,在“排行榜例子”中,我就是这样做的:

  1. “meteor run leaderboard”
  2. “cd .meteor / leaderboard; meteor mongo”