如何在Meteor项目中使用现有的MongoDB?


84

假设有一段时间,GUI客户端(通过wxPython)有一个正在运行的MongoDB服务器。

如何将新的Meteor项目连接到我现有的MongoDB



感谢您的评论。我知道@Dror的解决方案是官方的,而不是黑客,但是我之前已经分配了答案。我不太确定更改/更新“答案”是否是一种好的且允许的行为?
Drake Guan

“您可以随时更改接受哪个答案,或者根本不接受答案。” meta.stackexchange.com/a/5235/191226
Mike Graf

1
非常感谢您为我指出这一点。我现在更加自信。
Drake Guan

Answers:


156

使用环境变量MONGO_URL。就像是:

export MONGO_URL=mongodb://localhost:27017/your_db

替换your_dbmeteor或您要使用的任何数据库。


4
我被卡住了。您能解释一下如何用“流星”替换your_db吗?
Surjith SM

3
注意,这PROD上是行不通的,如果部署到流星-看看stackoverflow.com/questions/21971036/...
maxko87

2
@SurjithSMexport MONGO_URL=mongodb://localhost:27017/my_database_name会将数据放入名为的数据库中my_database_name。他的意思是,如果您愿意,您可以做export MONGO_URL=mongodb://localhost:27017/meteor。我想建议您将数据库名称命名为与项目相同的名称。
Benjamin Crouzier 2014年

1
可以使用某些配置文件来完成吗?尝试过settings.json,但无法正常工作
Kostanos,2015年

1
这使我的本地应用程序崩溃了。
Deborah

14

我们使用npm

  • 如果还没有package.json文件,请使用创建文件npm init

  • 在该文件中输入并修改以下行(替换所有<...>的):

"scripts": {"meteor": "MONGO_URL=mongodb://<USER>:<PASSWORD>@<SERVER>:<PORT>/<DB> meteor"}
  • 然后,您就可以开始流星npm run meteor

“ MONGO_URL”未被识别为内部或外部命令
Abdul Hameed

1
这是一个环境变量,请确保=号周围没有空格
malix

9

对丹尼答案的评论中,汤姆·维斯曼(Tom Wijsman)建议修补软件包/mongo-livedata/mongo_driver.js,第21行。app / meteor / run.js,第460行是一个更好的地方。这样,如果存在,仍可以选择环境变量,例如在Heroku上运行Meteor时。只需将默认的硬编码mongodb://127.0.0.1更改为您的MongoDB服务器的位置即可。


4

您可以使用db.copyDatabase进行此操作,但需要注意的是,存在一个错误,并且无法更新Meteor中的数据。参见https://github.com/meteor/meteor/issues/61

如果使用的是Meteor的开发版本,则可以通过启动Meteor应用程序从运行的MongoDB服务器传输数据,然后执行以下操作:

mongo --port 3002

这会将您连接到Meteor应用程序的Mongo服务器。现在像这样使用db.copyDatabase:

db.copyDatabase('myappDatabase', 'meteor', 'localhost');

这会将数据库myappDatabase从在本地主机上的标准端口上运行的MongoDB服务器复制到Meteor应用程序Mongo服务器。Meteor应用程序使用的数据库名称为“ meteor”。


2

只需将数据复制到Meteor MongoDB数据库即可-无需尝试将Meteor连接到现有数据库并承担覆盖内容的风险。

用于mongoexport分别转储您的集合,然后mongoimport将文件导入到meteorMeteor MongoDB实例中命名的数据库中。Meteor MongoDB实例在具有bind_address 127.0.0.1的端口3002上运行,并且数据文件位于Meteor项目的子目录中.meteor/local/db

如果您不熟悉MongoDB中的导入/导出,请参阅文档


这是否意味着我们应该将mongodb托管交付给流星,而不是通过其他方式托管?
德雷克·关

2
@Drake:除非您可以调整Meteor以使其与数据库一起使用。app/lib/mongo_runner.js决定如何启动它(您甚至可能不需要启动代码,因此请研究如何禁用它)。与它的连接似乎发生在内部packages/mongo-livedata/mongo_driver.js,我想您可以只更改第21行的url参数。如果您想知道它的值,请console.log(url);在此行之前插入它,重新启动Meteor并密切注意您的Meteor输出。确保确实确实在应用程序中调用过一次Meteor才能触发它...
Tamara Wijsman 2012年

@Drake:如果您希望我将我的评论作为答案(如果它对您有用),请告诉我。
Tamara Wijsman 2012年

@TomWijsman:我尝试console.log(url);并获得了信息!我会建议你做这个尽可能完整的变通办法回答,因为我相信它向社会提供帮助,或者至少,我这样的人不熟悉,流星尚未〜
德雷克关

使用mongochef复制和粘贴数据比使用export / import命令要容易得多。3t.io/mongochef
马克斯·霍奇斯

0

我所做的就是添加我的Digital ocean Drop Server的IP,而不是localhost,它的工作原理是:

env: {
      ROOT_URL: 'http://yourdomain.com',
      MONGO_URL: 'mongodb://104.236.24.66:27017/meteor',
      PORT: 3002,
    },

编辑:使用MUP部署流星项目:https : //github.com/zodern/meteor-up

env: {
      ROOT_URL: 'https://www.example.com',
      MONGO_URL: 'mongodb://localhost/meteor',
    },

Mup使用Docker,并将“链接”您的2个容器,从而将应用程序和mongo托管在同一台VM(服务器)上。出于安全原因,不应从公共IP访问mongoDB。


您在哪里添加的?
Gaurav Arya

将您的VM的公共IP用于mongoDB实际上是一种不好的做法,我将更新我的答案以使用localhost。
Milean

0

花了很多时间,发现它需要在URL周围加上引号:

export MONGO_URL='mongodb://localhost/meteor'
export MONGO_OPLOG_URL='op log url'

-6

您必须让您的应用程序在一个终端窗口中运行,然后打开另一个窗口并键入“ meteor mongo”,它应该可以工作!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.