当Meteor正在运行时,我如何从另一个客户端访问Meteor的MongoDB?

55

我希望能够从一个Python客户端访问Meteor正在运行的MongoDB数据库。

由于Meteor数据库被锁定,我无法启动mongod。

我该如何从另一个客户端访问这个数据库?

6个回答

70

meteor 命令提供了一种简洁的方式。获取正在运行的 mongod 的URL:

meteor mongo -U

你可以从Python中解析它。


使用 meteor mongo -U <myproj> 提供的mongo URL连接到托管在 <myproj>.meteor.com 上的受密码保护的实例时,验证失败。我操作有误吗?这是设计上的问题还是一个bug? - Benson
该命令适用于受密码保护的站点——它会提示输入密码。如果 Meteor 返回身份验证错误,则说明存在密码不匹配的情况。 - debergalis
返回的URL仅在一分钟内有效。如果Mongo本身出现故障,请尝试获取新的URL。 - debergalis
5
这应该是最佳答案。 当端口3002被其他程序使用时,Meteor会为Mongo使用另一个端口。通过这个命令,您可以找出当前正在使用的端口。 - Hubert OG
如果你有疑问...数据库的名称是“meteor”(我不知道为什么我以为它是项目名称) - Sabrina Leggett
显示剩余3条评论

37
当你运行 meteor 命令时,Meteor 会为你启动端口为3002的 mongod,并将mongo数据文件存储在 .meteor/local/db 中。 ps aux | grep 'mongod' 的输出显示 Meteor 使用的 mongod 命令。
/usr/local/meteor/mongodb/bin/mongod --bind_ip 127.0.0.1 --smallfiles --port 3002 --dbpath /path/to/your/project/.meteor/local/db

所以只需按照您的mongo客户端进行连接。在python中:

>>> import pymongo
>>> con = pymongo.Connection(host='127.0.0.1', port=3002)
>>> con.database_names()
[u'meteor', u'local']

更新:不幸的是,以这种方式直接在 MongoDB 中进行更改不会实时反映在应用程序中,但更改将在完整页面重新加载时反映出来。


5
实际上,看起来不需要进行完整的页面重新加载。在这个文件 - https://github.com/meteor/meteor/blob/master/packages/mongo-livedata/mongo_driver.js - 中,你会看到每10秒刷新一次的计时器,无论Mongo的'dirty'状态如何。只需直接更新Mongo并等待10秒钟,更改将出现在浏览器中。 - jonmc12
2
我刚刚测试了一下,它确实有效,只需等待10秒钟即可更新。但愿有一种方法可以改变set interval的速度,而不必深入mongo-livedata。 - ericraio
13
这个回答的时间已经过时了。现在写入Mongo会立即更新所有连接服务器的页面。 - Andrew Mao
2
对于我来说,端口是3001,请确保运行“ps aux | grep 'mongod'”命令以查看计算机上正在使用的端口。 - Asaf
1
是的,他们将端口从3002更改为3001。 - nilsi
显示剩余4条评论

6

使用Meteor部署说明

命令应该如下所示:

   PORT=3000 MONGO_URL=mongodb://localhost:27017/myapp node bundle/main.js

2
这似乎是对完全不同问题的答复。 - Dan Dascalescu

2

您也可以在服务器端代码中使用以下方式找到它:

process.env.MONGO_URL

即使在运行时没有设置这个环境变量,它也会被设置为默认值。这似乎是内部找到它的方式(packages/mongo/remote_collection_driver.js)。 meteor mongo -U 给出的是重建默认域名/IP和数据库名称,但使用文件中存储的端口。
您可以将其放在服务器文件夹的任何位置,并从命令行读取它。
console.log('db url: ' + process.env.MONGO_URL);

我建立了一个网页,用于在Selenium测试中显示它,以便确认我们正在使用测试数据库,并且不会覆盖实时数据。


0
这是一个获取Mongo URI和Mongo数据库的Shell脚本:
#!/bin/bash -eux

read -s -p "Enter Password: " password

cmd=$(meteor mongo --url myapp.meteor.com << ENDPASS
$password
ENDPASS)
mongo_uri=$(echo $cmd | cut -f2 -d" ")
mongo_db=$(echo $mongo_uri | cut -d/ -f 4)

#my_client_command_with MONGODB_URI=$mongo_uri MONGO_DB=$mongo_db

````


-1
关于更新延迟10秒的问题:跟踪MongoDB oplog!这里有更多关于如何操作的信息:

http://meteorhacks.com/lets-scale-meteor.html

请确保您安装了智能集合并使用它们(使用Meteor.SmartCollection实例化您的集合,而不是使用Meteor.Collection),您会发现更新几乎是即时的。


2
请查看http://stackoverflow.com/help/deleted-answers,以了解如何“不要”回答问题。换言之:“根本未回答问题的答案”:**只有一个外部网站链接而已**。 - Radim Köhler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接