MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Node.js e MongoDB, riutilizzando l'oggetto DB

Puoi sempre scrivere un modulo che inizializzi le connessioni al database e le renda accessibili in tutto il programma. Ad esempio:

mongo.js

var mongodb = require('mongodb');

module.exports.init = function (callback) {
  var server = new mongodb.Server("127.0.0.1", 27017, {});
  new mongodb.Db('test', server, {w: 1}).open(function (error, client) {
    //export the client and maybe some collections as a shortcut
    module.exports.client = client;
    module.exports.myCollection = new mongodb.Collection(client, 'myCollection');
    callback(error);
  });
};

app.js

var mongo = require('./mongo.js');

//setup express...

//initialize the db connection
mongo.init(function (error) {
    if (error)
        throw error;

    app.listen(80); //database is initialized, ready to listen for connections
});

randomFile.js

var mongo = require('./mongo.js');

module.exports.doInsert = function () {
  //use the collection object exported by mongo.js
  mongo.myCollection.insert({test: 'obj'}, {safe:true}, function(err, objects) {
    if (err)
        console.warn(err.message);
  });
};

So che le persone parlano di pooling, ma quando ho eseguito il benchmarking del pool di connessioni mongo rispetto a una singola connessione per tutte le richieste, la singola connessione ha effettivamente funzionato meglio. Certo, è successo circa un anno fa, ma dubito che il concetto di base sia cambiato. Tutte le richieste sono asincrone, quindi non è che siano necessarie più connessioni per effettuare richieste simultanee.

Per quanto riguarda MongoClient, immagino che sia la nuova sintassi che stanno incoraggiando. In ogni caso, è essenzialmente un cliente oggetto che vuoi mantenere e rendere accessibile indipendentemente dallo stile che utilizzi.