Python 如何访问Meteor';当Meteor正在运行时,从另一个客户端下载MongoDB?

Python 如何访问Meteor';当Meteor正在运行时,从另一个客户端下载MongoDB?,python,mongodb,meteor,Python,Mongodb,Meteor,我想在Meteor运行时从Python客户端访问Meteor的MongoDB 我无法启动mongod,因为Meteor的数据库已锁定 如何从其他客户端访问数据库?使用 该命令将如下所示: PORT=3000 MONGO_URL=mongodb://localhost:27017/myapp node bundle/main.js 当您运行Meteor命令时,Meteor会在端口3002上为您启动mongod,并将mongo数据文件存储在.Meteor/local/db ps aux |

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

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

如何从其他客户端访问数据库?

使用

该命令将如下所示:

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

当您运行
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']

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

meteor命令提供了一种干净的方式。要获取正在运行的mongod的URL,请执行以下操作:

meteor mongo -U

您可以从python解析它。

这里是一个获取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
#/bin/bash-eux
阅读-s-p“输入密码:”密码

cmd=$(meteor mongo--url myapp.meteor.com关于更新延迟10秒:跟踪MongoDB oplog!这里有更多关于如何执行的信息:


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

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

process.env.MONGO_URL
即使在运行时未设置此环境变量,也会将其设置为默认值。这似乎是在内部找到它的方式(packages/mongo/remote\u collection\u driver.js)

其中一个由meteor mongo-U给出,它似乎重建了默认的域/ip和数据库名,但使用了文件中存储的端口

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

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

我设置了一个网页来显示它,以便在selenium测试中再次检查我们使用的是测试数据库,而不是覆盖实时数据。

是的,我确信我们可以依靠轮询,但这会使meteor的整个用途失效——通过观察者模式更新的反应性模板。实际上,它看起来像一个完整的页面eload不是必需的。在这个文件中--不管Mongo的“脏”状态如何,你都会看到每10秒刷新一次计时器。直接更新Mongo并等待10秒,更改就会出现在浏览器中。我刚刚测试了这个,它确实有效,你只需等待10秒就可以更新。我希望有一种方法可以改变Mongo的速度设置interval而不必深入mongo-livedata。这个答案已经过时。立即写入mongo将立即更新所有连接服务器的页面。对于我来说,它是端口3001,请确保运行
ps aux | grep'mongod'
命令,查看它在您的机器上使用的端口。使用
meteor提供的mongo URLmongo-U
对于托管在.meteor.com上的受密码保护的实例,由于身份验证错误而失败。我这样做是错误的,是出于设计还是错误?该命令适用于受密码保护的站点--它会提示输入密码。如果您从meteor收到身份验证错误,它会认为密码不匹配。返回的URL为仅在一分钟内有效。如果mongo本身失败,请尝试获取新的URL。这正是我所需要的,谢谢。我能够让我的python代码连接。现在,我在尝试与db对话时看到一些错误,但我会稍后检查。这应该是最重要的答案。当端口3002被其他东西使用时,Meteor将使用另一个Mongo的r端口。使用此命令,您可以找出当前使用的是哪一个。请尝试阅读此命令,以更好地了解如何不回答。即:“根本无法回答问题的答案”:仅限于指向外部站点的链接这看起来像是对完全不同问题的回答。