sql >> Base de Datos >  >> NoSQL >> MongoDB

La mejor manera de conectarse a MongoDB usando Node.js

Puede usar una variable global para mantener la conexión (por ejemplo, db ), por ejemplo:

var db = null // global variable to hold the connection

MongoClient.connect('mongodb://localhost:27017/', function(err, client) {
    if(err) { console.error(err) }
    db = client.db('test') // once connected, assign the connection to the global variable
})

app.get('/', function(req, res) {
    db.collection('test').find({}).toArray(function(err, docs) {
        if(err) { console.error(err) }
        res.send(JSON.stringify(docs))
    })
})

O, si lo prefieres, también puedes usar el objeto Promesa que es devuelto por MongoClient si se llama sin un argumento de devolución de llamada:

var conn = MongoClient.connect('mongodb://localhost:27017/') // returns a Promise

app.get('/', function(req, res) {
    conn.then(client=> client.db('test').collection('test').find({}).toArray(function(err, docs) {
        if(err) { console.error(err) }
        res.send(JSON.stringify(docs))
    }))
})

Tenga en cuenta que utilicé la definición de función de flecha gruesa de ES6 en el segundo ejemplo.

Tiene toda la razón en que no debe llamar a MongoClient cada vez. El uso de una variable global o Promises permite que el controlador MongoDB node.js cree un grupo de conexiones, lo que logra al menos dos cosas buenas:

  • Las conexiones se reutilizan en un grupo, por lo que no hay múltiples procesos costosos de configuración/desmontaje durante la vida útil de su aplicación. Te conectas una vez y dejas que el conductor se encargue del resto por ti.
  • Puede controlar la cantidad de conexiones que hace su aplicación a la base de datos, limitando el tamaño del grupo de conexiones.

Editar 2018-08-24 :El MongoClient.connect() El método en la versión 3.0 y posteriores del controlador node.js devuelve un objeto de cliente en lugar de un objeto de base de datos. Los ejemplos anteriores se modificaron para mantenerlo actualizado con la última versión del controlador node.js.