Как использовать существующую MongoDB в проекте Meteor?


85

Допустим, есть работающий сервер MongoDB для клиента с графическим интерфейсом (от wxPython ) на некоторое время.

Как я могу подключить мой новый проект Meteor к моей уже существующей MongoDB ?


Dror ( stackoverflow.com/users/460278/dror ) имеет правильный ответ ниже: stackoverflow.com/a/12996674/1114274
Майк Граф,

Спасибо за комментарий. Я знаю, что решение @Dror является более официальным, а не хакерским, но я уже давал ответ раньше. Я не совсем уверен, что это хорошее и допустимое поведение, чтобы изменить / обновить "ответ" тогда?
Дрейк Гуан

«Вы можете изменить принятый ответ или просто отменить его в любое время». meta.stackexchange.com/a/5235/191226
Майк Граф

1
Большое спасибо, что указали мне на это. Теперь я увереннее.
Дрейк Гуан

Ответы:


157

Используйте переменную окружения MONGO_URL. Что-то вроде:

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

Замените your_dbна meteorлюбой другой db, который вы хотите использовать.


4
Я застрял. Можете ли вы объяснить, как заменить your_db на "meteor"
Сурджит С.М.

3
обратите внимание, что это НЕ будет работать на продукте при развертывании на
метеоре

2
@SurjithSM export MONGO_URL=mongodb://localhost:27017/my_database_nameпоместит данные в базу данных с именем my_database_name. Он имел в виду, что если хочешь, можешь export MONGO_URL=mongodb://localhost:27017/meteor. Подумал, я бы посоветовал назвать вашу базу данных таким же именем, как и ваш проект.
Бенджамин Крузье

1
Можно ли это сделать с помощью какого-нибудь конфигурационного файла? Пробовал с settings.json, но ничего не
вышло

1
это разбило мое локальное приложение.
Deborah

14

Мы используем npm:

  • Создайте package.jsonфайл npm init, если у вас его еще нет.

  • Введите и измените следующую строку в этом файле (заменив все <...>символы):

"scripts": {"meteor": "MONGO_URL=mongodb://<USER>:<PASSWORD>@<SERVER>:<PORT>/<DB> meteor"}
  • Затем вы можете запустить Meteor, простоnpm run meteor

«MONGO_URL» не распознается как внутренняя или внешняя команда
Абдул Хамид

1
это переменная среды, убедитесь, что вокруг знака = нет пробелов
malix

9

В комментариях к ответу Дэнни Том Вийсман рекомендует исправлять пакеты / mongo-liveata / mongo_driver.js, строка 21. Лучшее место находится в app / meteor / run.js, строка 460. Таким образом, переменная окружения по-прежнему выбирается, если она есть. , например, при запуске Meteor на Heroku. Просто измените жестко заданный по умолчанию mongodb: //127.0.0.1 на местоположение вашего сервера MongoDB.


4

Для этого вы можете использовать db.copyDatabase, но с оговоркой, что есть ошибка и вы не можете обновить данные в Meteor. См. Https://github.com/meteor/meteor/issues/61

Если вы используете разрабатываемую версию Meteor, вы можете передавать данные с работающего сервера MongoDB, запустив приложение Meteor, а затем выполнив:

mongo --port 3002

Это подключит вас к серверу Mongo приложения Meteor. Теперь используйте db.copyDatabase следующим образом:

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

Это скопирует базу данных myappDatabase с сервера MongoDB, работающего на стандартном порте на localhost, на сервер Mongo приложения Meteor. Приложение Meteor использует имя базы данных «метеор».


2

Просто скопируйте данные в базу данных Meteor MongoDB - нет причин пытаться подключить Meteor к существующей базе данных и рисковать перезаписать данные.

Используйте mongoexportдля сброса ваших коллекций по отдельности, а затем mongoimportдля импорта файлов в базу данных, meteorуказанную в экземпляре Meteor MongoDB. Экземпляр Meteor MongoDB работает на порту 3002 с bind_address 127.0.0.1, а файлы данных находятся в подкаталоге проекта Meteor .meteor/local/db.

См. Документацию, если вы не знакомы с импортом / экспортом в MongoDB.


Означает ли это, что мы должны поставить хостинг mongodb на Meteor вместо хостинга другими способами?
Дрейк Гуан

2
@Drake: Если вы не можете настроить Meteor для работы с вашей базой данных. app/lib/mongo_runner.jsрешает, как его запустить (возможно, вам даже не потребуется запускать код, поэтому узнайте, как его отключить). Соединение с ним, кажется, происходит внутри packages/mongo-livedata/mongo_driver.js, я думаю, вы можете просто изменить параметр url в строке 21. Если вы хотите узнать его значение, вставьте console.log(url);в строку перед этим, перезапустите Meteor и внимательно следите за выходом Meteor. Убедитесь, что вы действительно один раз вызываете Meteor в своем приложении, чтобы оно
сработало

@Drake: Если вы хотите, чтобы я разместил свой комментарий в качестве ответа (если он сработал для вас), дайте мне знать.
Тамара Вейсман

@TomWijsman: Я попробовал console.log(url);и получил информацию! Я предлагаю вам сделать это настолько полным, как обходной ответ, потому что я считаю, что он действительно помогает сообществу или, по крайней мере, людям вроде меня, еще не знакомым с метеором ~
Дрейк Гуан

чертовски проще использовать mongochef для копирования и вставки данных, чем команды экспорта / импорта. 3t.io/mongochef
Макс Ходжес

0

Все, что я сделал, это добавил IP моего сервера Digital Ocean Droplet вместо 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 на одной виртуальной машине (сервере). Ваш mongoDB не должен быть доступен с общедоступного IP-адреса из соображений безопасности.


где ты это добавил?
Gaurav Arya

на самом деле плохая практика использовать публичный IP-адрес вашей виртуальной машины для mongoDB, я собираюсь обновить свой ответ, чтобы использовать localhost.
Milean

0

Потратил много времени и обнаружил, что для этого нужны кавычки вокруг URL:

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

-6

Вам нужно, чтобы ваше приложение работало в одном окне терминала, затем откройте другое и введите «meteor mongo», и оно должно работать!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.