Jak możesz połączyć się z MongoDB za pomocą Meteora?
Scenariusz A:Użyj wbudowanej bazy danych jako domyślnej
To znacznie prostsze niż to, co zrobiłeś. Po uruchomieniu meteor faktycznie uruchamiasz bazę danych z serwerem Meteor, gdzie Meteor nasłuchuje na porcie 3000, a baza danych na porcie 3001. Aplikacja Meteor jest już połączona z tą bazą danych na porcie 3001 i używa bazy danych o nazwie meteor . Nie ma potrzeby wracać do MongoInternals.RemoteCollectionDriver . Po prostu usuń ten kod i zmień rzeczy na:
Boxes = new Mongo.Collection("boxes"); // use default MongoDB connection
Scenariusz B:użyj innej bazy danych jako domyślnej
Korzystanie z MONGO_URL zmienna środowiskowa możesz ustawić ciąg połączenia na MongoDB podczas uruchamiania serwera Meteor. Zamiast lokalnej bazy danych portu 3001 lub nieuwierzytelnionego połączenia możesz dokładnie określić, gdzie i jak się połączyć. Uruchom swój serwer Meteor w ten sposób:
$ MONGO_URL=mongodb://user:example@sqldat.com:27017/meteor meteor
Możesz też pominąć user:example@sqldat.com część polecenia, jeśli uwierzytelnianie nie jest potrzebne.
Scenariusz C:Połącz się z drugą (3. itd.) bazą danych z tej samej aplikacji Meteor
Teraz musimy użyć MongoInternals.RemoteCollectionDriver . Jeśli chcesz użyć innej bazy danych, która nie jest domyślną bazą danych zdefiniowaną podczas uruchamiania serwera Meteor, powinieneś zastosować swoje podejście.
var database = new MongoInternals.RemoteCollectionDriver('mongodb://user:example@sqldat.com:27017/meteor');
var numberOfDocs = database.open('boxes').find().count();
Bonus:dlaczego nie powinieneś używać MongoInternals z Mongo.Collection ?
Jak wskazuje dokumentacja
nie powinieneś przekazywać żadnego połączenia Mongo do new Mongo.Collection() polecenie, ale tylko połączenie z inną instancją Meteor. Oznacza to, że jeśli używasz DDP.connect aby połączyć się z innym serwerem, możesz użyć swojego kodu - ale nie powinieneś mieszać MongoInternals z Mongo.Collection - nie współpracują dobrze ze sobą.