Meteor 无法连接到 MongoDB

Posted

技术标签:

【中文标题】Meteor 无法连接到 MongoDB【英文标题】:Meteor does not connect to MongoDB 【发布时间】:2013-07-27 00:09:43 【问题描述】:

我正在尝试将 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');

./server/app.js

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

./client/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.

【问题讨论】:

您是在捆绑的应用程序中尝试这个还是使用meteor [run] @Akshat 现在只运行meteor @betacar 在运行流星时打开一个单独的终端并在项目目录中使用命令meteor mongo。它是否连接到数据库,你可以在那里运行命令吗? 您的 MONGO_URL 是什么样的?是不是类似于mongodb://name:pass@host1:port1,host2:port2 meteor mongo 不适用于 METEOR_URL - 请参阅此答案:***.com/a/16495135/194957 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

console.log(Posts.find()); 返回一个没有集合也没有文档的对象:Object collection=..., cursor_pos=0, reactive=true; Object docs=..., _observeQueue=..., next_qid=2, more... 我突然遇到了和你一样的问题@betacar 但我的console.log 由于某种原因默认为LocalCollection - 尽管我明确使用了一个名称:LocalCollection.Cursor collection: LocalCollection, 尝试 console.log(Posts.find().count()) 代替。 Find 不会立即访问数据库或返回文档。【参考方案3】:

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

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

这就是我从您的输入中所能想到的全部内容。希望对您有所帮助。

【讨论】:

posts 集合包含近 200 万个文档。显然不是收藏。我的本地 MongoDB 不受用户/通行证身份验证的保护,因为它旨在用于开发目的。 某处一定有错误。您是否尝试了日志记录部分以了解是否正在发送数据?【参考方案4】:

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

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

    “流星跑排行榜” "cd .meteor/leaderboard;meteor mongo"

【讨论】:

以上是关于Meteor 无法连接到 MongoDB的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb:第一次连接时无法连接到服务器

在 Ubuntu 20.04 上无法连接到 mongodb,连接被拒绝

无法使用 MEAN 堆栈连接到 Mongodb.atlas 集群

Dockerizing NestJS APP 和 MongoDB “首次连接时无法连接到服务器 [localhost:27017]”

MongoDB 与 Docker “首次连接时无法连接到服务器 [localhost:27017]”

MongoDB 与 Docker “首次连接时无法连接到服务器 [localhost:27017]”