Как можете да се свържете с MongoDB с Meteor?
Сценарий A:Използвайте вградената база данни по подразбиране
Това е много по-просто от това, което направихте. Когато стартирате meteor
всъщност стартирате DB със сървъра Meteor, където Meteor слуша на порт 3000, а базата данни на порт 3001. Приложението Meteor вече е свързано към тази база данни на порт 3001 и използва db с име meteor
. Няма никаква нужда да се връщате към MongoInternals.RemoteCollectionDriver
. Просто премахнете този код и променете нещата на:
Boxes = new Mongo.Collection("boxes"); // use default MongoDB connection
Сценарий Б:Използвайте различна база данни по подразбиране
Използване на MONGO_URL
променлива на средата можете да зададете низа за свързване на MongoDB при стартиране на сървъра Meteor. Вместо базата данни на локалния порт 3001 или неавтентифицирана връзка, можете да посочите точно къде и как да се свържете. Стартирайте вашия Meteor сървър по следния начин:
$ MONGO_URL=mongodb://user:[email protected]:27017/meteor meteor
Можете също така да пропуснете user:[email protected]
част от командата, ако не е необходимо удостоверяване.
Сценарий C:Свързване към втора (3-та и т.н.) база данни от същото приложение Meteor
Сега трябва да използваме MongoInternals.RemoteCollectionDriver
. Ако искате да използвате друга база данни, която не е базата данни по подразбиране, дефинирана при стартиране на сървъра Meteor, трябва да използвате вашия подход.
var database = new MongoInternals.RemoteCollectionDriver('mongodb://user:[email protected]:27017/meteor');
var numberOfDocs = database.open('boxes').find().count();
Бонус:Защо не трябва да използвате MongoInternals
с Mongo.Collection
?
Както посочват документите
не трябва да предавате връзка на Mongo към new Mongo.Collection()
команда, а само връзка с друг екземпляр на Meteor. Това означава, че ако използвате DDP.connect
за да се свържете с различен сървър, можете да използвате вашия код - но не трябва да смесвате MongoInternals
с Mongo.Collection
- те не работят добре заедно.