Come puoi connetterti a un MongoDB con Meteor?
Scenario A:utilizza il DB integrato come predefinito
Questo è molto più semplice di quello che hai fatto tu. Quando esegui meteor in realtà si avvia un DB con il server Meteor, dove Meteor è in ascolto sulla porta 3000 e il database sulla porta 3001. L'app Meteor è già connessa a questo database sulla porta 3001 e utilizza un db chiamato meteor . Non è necessario ricorrere a MongoInternals.RemoteCollectionDriver . Rimuovi quel codice e cambia le cose in:
Boxes = new Mongo.Collection("boxes"); // use default MongoDB connection
Scenario B:utilizza un DB diverso come predefinito
Usando il MONGO_URL variabile di ambiente è possibile impostare la stringa di connessione su un MongoDB all'avvio del server Meteor. Invece del database della porta 3001 locale o di una connessione non autenticata è possibile specificare esattamente dove e come connettersi. Avvia il tuo server Meteor in questo modo:
$ MONGO_URL=mongodb://user:example@sqldat.com:27017/meteor meteor
Puoi anche omettere l'user:example@sqldat.com parte del comando se non è necessaria l'autenticazione.
Scenario C:connessione a un secondo (3°, ecc.) DB dalla stessa app Meteor
Ora dobbiamo usare MongoInternals.RemoteCollectionDriver . Se desideri utilizzare un altro database che non sia il DB predefinito definito all'avvio del server Meteor, dovresti utilizzare il tuo approccio.
var database = new MongoInternals.RemoteCollectionDriver('mongodb://user:example@sqldat.com:27017/meteor');
var numberOfDocs = database.open('boxes').find().count();
Bonus:perché non dovresti usare MongoInternals con Mongo.Collection ?
Come indicano i documenti
non dovresti passare alcuna connessione Mongo al new Mongo.Collection() comando, ma solo una connessione a un'altra istanza di Meteor. Ciò significa che se utilizzi DDP.connect per connetterti a un server diverso puoi usare il tuo codice, ma non dovresti mischiare i MongoInternals con Mongo.Collection - non funzionano bene insieme.