sql >> Databasteknik >  >> NoSQL >> MongoDB

Node.js och MongoDB, återanvändning av DB-objektet

Du kan alltid skriva en modul som initierar dina databasanslutningar och gör dem tillgängliga i hela ditt program. Till exempel:

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);
  });
};

Jag vet att folk pratar om pooling, men när jag gjorde benchmarking av att poola mongo-anslutningar kontra en enda anslutning för alla förfrågningar, fungerade den enstaka anslutningen faktiskt bättre. Visst, det här var ungefär ett år sedan, men jag tvivlar på att grundkonceptet har förändrats. Alla förfrågningar är asynkrona, så det är inte så att flera anslutningar är nödvändiga för att göra samtidiga förfrågningar.

När det gäller MongoClient antar jag att det är den nya syntaxen de uppmuntrar. Hur som helst, det är i grunden en klient objekt som du vill behålla och göra tillgängligt oavsett vilken stil du använder.



  1. Introduktion till Redis Data Structures:Bitmaps

  2. mongoose befolka fält utan ref alternativ

  3. Hur man frågar alla underdokument

  4. Azure DataBricks Stream foreach misslyckas med NotSerializableException