Jak używać istniejącej bazy danych MongoDB w projekcie Meteor?


84

Powiedzmy, że przez jakiś czas działa serwer MongoDB dla klienta GUI (przez wxPython ).

Jak mogę podłączyć mój nowy projekt Meteor do mojej już istniejącej bazy danych MongoDB ?



Dzięki za komentarz. Wiem, że rozwiązanie @ Dror jest bardziej oficjalne niż hack, ale już wcześniej przypisałem odpowiedź. W takim razie nie jestem do końca pewien, czy zmiana / aktualizacja „odpowiedzi” jest dobrym i dopuszczalnym zachowaniem?
Drake Guan

„W dowolnym momencie możesz zmienić, która odpowiedź została zaakceptowana, lub po prostu ją cofnąć”. meta.stackexchange.com/a/5235/191226
Mike Graf

1
Wielkie dzięki za wskazanie mi tego. Jestem teraz bardziej pewny siebie.
Drake Guan

Odpowiedzi:


156

Użyj zmiennej środowiskowej MONGO_URL. Coś jak:

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

Wymień your_dbsię meteorlub cokolwiek db chcesz użyć.


4
Utknąłem. Czy możesz wyjaśnić, jak zamienić your_db na „meteor”
Surjith SM

3
zauważ, że to NIE zadziała na prod, jeśli zostanie wdrożony na meteor - patrz stackoverflow.com/questions/21971036/ ...
maxko87

2
@SurjithSM export MONGO_URL=mongodb://localhost:27017/my_database_nameumieści dane w bazie danych o nazwie my_database_name. Miał na myśli, że jeśli chcesz, możesz to zrobić export MONGO_URL=mongodb://localhost:27017/meteor. Pomyślałem, że radziłbym nazwać bazę danych taką samą, jak nazwa projektu.
Benjamin Crouzier,

1
Czy można to zrobić za pomocą jakiegoś pliku konfiguracyjnego? Próbowałem z settings.json i to nie zadziała
Kostanos

1
to rozwaliło moją lokalną aplikację.
Deborah

14

Używamy npm:

  • Utwórz package.jsonplik z npm init, jeśli jeszcze go nie masz.

  • Wprowadź i zmodyfikuj następujący wiersz w tym pliku (zastępując wszystkie <...>):

"scripts": {"meteor": "MONGO_URL=mongodb://<USER>:<PASSWORD>@<SERVER>:<PORT>/<DB> meteor"}
  • Możesz wtedy rozpocząć meteor z justnpm run meteor

„MONGO_URL” nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne
Abdul Hameed

1
jest to zmienna środowiskowa, upewnij się, że nie ma spacji wokół znaku =
malix

9

W komentarzach do odpowiedzi Danny'ego Tom Wijsman zaleca łatanie pakietów / mongo-Liveata / mongo_driver.js, wiersz 21. Lepszym miejscem jest app / meteor / run.js, wiersz 460. W ten sposób zmienna środowiskowa jest nadal pobierana, jeśli jest obecna , na przykład podczas uruchamiania Meteor na Heroku. Po prostu zmień domyślną zakodowaną na stałe mongodb: //127.0.0.1 na lokalizację twojego serwera MongoDB.


4

Możesz użyć do tego db.copyDatabase, z zastrzeżeniem, że jest błąd i nie możesz zaktualizować danych w Meteor. Zobacz https://github.com/meteor/meteor/issues/61

Jeśli używasz rozwojowej wersji Meteor, możesz przesyłać dane z działającego serwera MongoDB, uruchamiając aplikację Meteor, a następnie wykonując:

mongo --port 3002

Spowoduje to połączenie z serwerem Mongo aplikacji Meteor. Teraz użyj db.copyDatabase w następujący sposób:

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

Spowoduje to skopiowanie bazy danych myappDatabase z serwera MongoDB działającego na standardowym porcie na hoście lokalnym na serwer aplikacji Meteor Mongo. Nazwa bazy danych używana przez aplikację Meteor to „meteor”.


2

Wystarczy skopiować dane do bazy danych Meteor MongoDB - nie ma powodu, aby próbować podłączyć Meteor do istniejącej bazy danych i ryzykować nadpisaniem rzeczy.

Użyj, mongoexportaby zrzucić swoje kolekcje indywidualnie, a następnie mongoimportzaimportować pliki do bazy danych o nazwie meteorw instancji Meteor MongoDB. Instancja Meteor MongoDB działa na porcie 3002 z adresem bind_address 127.0.0.1, a pliki danych znajdują się w podkatalogu projektu Meteor .meteor/local/db.

Zobacz dokumentację, jeśli nie znasz importu / eksportu w MongoDB.


Czy to oznacza, że ​​powinniśmy udostępniać hosting mongodb firmie meteor zamiast w inny sposób?
Drake Guan

2
@Drake: Chyba że możesz dostosować Meteor do pracy z twoją bazą danych. app/lib/mongo_runner.jsdecyduje, jak go uruchomić (możesz nawet nie wymagać uruchamiania kodu, dlatego sprawdź, jak go wyłączyć). Wydaje się packages/mongo-livedata/mongo_driver.js, że połączenie ma miejsce w środku , myślę, że możesz po prostu zmienić parametr url w linii 21. Jeśli chcesz poznać jego wartość, wstaw console.log(url);w linii wcześniej, zrestartuj Meteor i uważnie obserwuj wyjście Meteor. Upewnij się, że rzeczywiście raz zadzwoniłeś do Meteor w aplikacji, aby się uruchomił ...
Tamara Wijsman

@Drake: Jeśli chcesz, żebym zamieścił mój komentarz jako odpowiedź (jeśli zadziałał dla Ciebie), daj mi znać.
Tamara Wijsman

@TomWijsman: Próbowałem console.log(url);i otrzymałem informacje! Zasugeruję, abyś zrobił to jako kompletną odpowiedź, ponieważ uważam, że zapewnia pomoc społeczności, a przynajmniej ludziom takim jak ja, którzy nie są jeszcze zaznajomieni z meteor ~
Drake Guan

o wiele łatwiejsze w użyciu mongochef do kopiowania i wklejania danych, zamiast poleceń eksportu / importu. 3t.io/mongochef
Max Hodges

0

Wszystko, co zrobiłem, to dodanie adresu IP mojego serwera dropletów Digital ocean zamiast hosta lokalnego i zadziałało:

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

EDYTUJ: użyj MUP do wdrażania projektów meteorowych: https://github.com/zodern/meteor-up

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

Mup używa Dockera i „połączy” Twoje 2 kontenery, hostując w ten sposób zarówno aplikację, jak i mongo na tej samej maszynie wirtualnej (serwerze). Twoja baza danych mongoDB nie powinna być dostępna z publicznego adresu IP ze względów bezpieczeństwa.


gdzie to dodałeś?
Gaurav Arya,

używanie publicznego adresu IP maszyny wirtualnej dla bazy danych mongoDB jest w rzeczywistości złą praktyką, zamierzam zaktualizować moją odpowiedź, aby używać localhost.
Milean

0

Spędziłem dużo czasu i odkryłem, że wymaga to cudzysłowów wokół adresu URL:

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

-6

Musisz uruchomić aplikację w jednym oknie terminala, a następnie otworzyć inne i wpisać „meteor mongo” i powinno działać!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.