55

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

我无法启动 mongod,因为 Meteor 的数据库已锁定。

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

4

6 回答 6

70

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

meteor mongo -U

您可以从 python 解析。

于 2012-04-24T21:55:22.033 回答
37

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

输出ps aux | grep 'mongod'显示了流星使用的 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 客户端。在蟒蛇中:

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

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

于 2012-04-24T16:43:10.357 回答
6

使用Meteor 部署说明

该命令将如下所示:

   PORT=3000 MONGO_URL=mongodb://localhost:27017/myapp node bundle/main.js
于 2012-04-24T08:16:57.627 回答
2

您还可以使用以下方法从服务器端代码中找到它:

process.env.MONGO_URL

即使您在运行时没有设置此环境变量,它也会被设置为默认值。这似乎是在内部找到它的方式(packages/mongo/remote_collection_driver.js)

给出的一个meteor mongo -U似乎重建了默认域/ip 和 db-name,但使用存储在文件中的端口。

您可以将它放在服务器文件夹中的任何位置,然后从命令行读取它。

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

我设置了一个网页来显示它,以仔细检查我们正在使用测试数据库的硒测试,而不是覆盖实时数据。

于 2016-01-14T12:22:04.980 回答
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

````

于 2013-11-15T21:04:29.697 回答
-1

关于更新延迟 10 秒:跟踪 MongoDB oplog!有关如何在此处执行此操作的更多信息:

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

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

于 2013-11-18T04:06:01.677 回答