Hur kan du ansluta till en MongoDB med Meteor?
Scenario A:Använd den inbyggda databasen som standard
Det här är mycket enklare än vad du gjorde. När du kör meteor
du startar faktiskt en DB med Meteor-servern, där Meteor lyssnar på port 3000 och databasen på port 3001. Meteor-appen är redan ansluten till denna databas vid port 3001 och använder en db som heter meteor
. Det finns inget som helst behov av att falla tillbaka till MongoInternals.RemoteCollectionDriver
. Ta bara bort den koden och ändra saker till:
Boxes = new Mongo.Collection("boxes"); // use default MongoDB connection
Scenario B:Använd en annan DB som standard
Använder MONGO_URL
miljövariabel du kan ställa in anslutningssträngen till en MongoDB när du startar Meteor-servern. Istället för den lokala port 3001-databasen eller en oautentiserad anslutning kan du ange exakt var och hur du ska ansluta. Starta din Meteor-server så här:
$ MONGO_URL=mongodb://user:[email protected]:27017/meteor meteor
Du kan också utelämna user:[email protected]
del av kommandot om ingen autentisering behövs.
Scenario C:Anslut till en andra (tredje, etc) DB från samma Meteor-app
Nu måste vi använda MongoInternals.RemoteCollectionDriver
. Om du vill använda en annan databas som inte är standard-DB som definieras när Meteor-servern startas, bör du använda ditt tillvägagångssätt.
var database = new MongoInternals.RemoteCollectionDriver('mongodb://user:[email protected]:27017/meteor');
var numberOfDocs = database.open('boxes').find().count();
Bonus:Varför ska du inte använda MongoInternals
med Mongo.Collection
?
Som dokumenten anger
du ska inte skicka någon Mongo-anslutning till new Mongo.Collection()
kommando, men bara en anslutning till en annan Meteor-instans. Det betyder att om du använder DDP.connect
för att ansluta till en annan server kan du använda din kod - men du bör inte blanda MongoInternals
med Mongo.Collection
- de fungerar inte bra tillsammans.