我正在尝试将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.
答案 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()
如果输出不是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控制台提供的帐户。在那里插入一些帖子并再次测试。
如果你还没有得到任何文件,那么......
这是我能从你的输入中想到的。希望它有所帮助。
答案 3 :(得分:0)
首先,在一个shell的窗口中运行mongo
然后在拳头还在运行时,只需在另一个炮弹的窗户上运行“meteor mongo”! 在我的Mac上,在“排行榜例子”中,我就是这样做的: