Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

273
Vistas
¿Es una buena práctica abrir una nueva conexión para cada consulta con una base de datos MongoDB?

Estoy creando un servidor web que almacena los datos de un usuario en una base de datos MongoDB. El código detrás de las solicitudes web utiliza funciones asíncronas para insertar un documento en la base de datos, pero debido a que estas funciones son asíncronas, significa que para cada solicitud se realiza una nueva conexión con el servidor.

 exports.create_user = function(username, password, callback) { mongo.connect(url, function(err, db) { db.collection('users').insertOne({username: username, password: password}, function(err, result) { callback(result) db.close() }) }) }

Tengo la impresión de que hacerlo de esta manera no es la mejor práctica, pero no puedo pensar en una manera de hacerlo usando el modelo de módulo que estoy usando arriba. Cualquier sugerencia o consejo sería apreciado.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Me topé con esto en mi propia investigación si usar una nueva conexión para mongodb en cada consulta es la mejor práctica o usar la agrupación de conexiones. Resulta que mongodb sugiere la agrupación de conexiones para la mayoría de los casos de uso.

Citando de los documentos :

Un grupo de conexiones es una memoria caché de las conexiones de la base de datos mantenida por el controlador para que las conexiones se puedan reutilizar cuando se requieran nuevas conexiones a la base de datos. Para reducir la cantidad de grupos de conexiones creados por su aplicación, recomendamos llamar a MongoClient.connect una vez y reutilizar la variable de la base de datos devuelta por la devolución de llamada.

Por lo general, uso el siguiente formulario para establecer y reutilizar una conexión mientras realizo consultas:

 // db.js import { MongoClient } from 'mongodb'; // this will hold our cached database connection, which will itself hold multiple connections in a pool to be used let connection, database; export { connect: (next) => { // already established? => return connection if (database) return next(undefined, database); // establish connection MongoClient.connect('http://localhost:27017/admin', (err, db) => { if (err) return next(err); // save connection connection = db; // connect to database database = db.db('myDatabase'); // call callback next(undefined, database); }); }, disconnect: (next) => { if (!connection) return next(); // close connection connection.close(); next(); } };

Disparando consultas:

 import db from './db'; db.connect((err, db) => { if (err) return next(err); db.collection('myUsers').insertOne({name: 'test'}, (err) => { if (err) throw err; db.disconnect((err) => { if (err) throw err; console.log('Everything finished, database connection closed'); }); }); });

Nota: es posible determinar la cantidad máxima de conexiones agrupadas manualmente (afaik, ¿el valor predeterminado es 5?). Consulte los documentos sobre cómo configurar la cantidad de conexiones abiertas a través de la URL de mongodb.

over 4 years ago · Santiago Trujillo Denunciar

0

Al hacer db.close() puede cerrar la conexión. Si no cierra su conexión, el bucle de eventos mantendrá la conexión abierta y su proceso no se cerrará. Si está construyendo un servidor web en el que su proceso no terminará, no es necesario que cierre la conexión. Para un nodo de referencia-mongodb-native

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda