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

我想在运行Meteor时从Python客户端访问Meteor的MongoDB。

因为Meteor的数据库被locking,我无法启动一个mongod。

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

meteor命令提供了一个干净的方法。 获取正在运行的mongod的URL:

 meteor mongo -U 

你可以从pythonparsing。

当您运行meteor命令时, meteor将在端口3002上为您启动mongod,并将mongo数据文件存储在.meteor/local/db

ps aux | grep 'mongod'输出 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'] 

更新:不幸的是,以这种方式直接在mongo中进行更改不会反映在应用程序中,但更改将反映在整个页面(重新加载)。

使用Meteor部署说明

该命令将如下所示:

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

你也可以使用以下方法从服务器端代码中find它:

 process.env.MONGO_URL 

即使您在运行时未设置此环境variables,也会将其设置为默认值。 这似乎是如何在内部find(packages / mongo / remote_collection_driver.js)

一个是由meteor mongo -U似乎重build默认域/ ip和db-name,但使用存储在该文件中的端口。

你可以把它放在服务器文件夹的任何地方,然后从命令行读取它。

 console.log('db url: ' + process.env.MONGO_URL); 

我设置了一个网页来显示它,以便检查我们使用testing数据库的seleniumtesting,而不是覆盖实时数据。

这里有一个shell脚本来获取Mongo URI和Mongo数据库:

 #!/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 

““

关于更新10秒延迟:尾巴MongoDB oplog! 关于如何在这里做更多的信息:

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

确保你安装智能集合并使用它们(使用Meteor.SmartCollection而不是Meteor.Collection实例化你的集合),你会发现这些更新基本上是立即的。