Soluciona cualquier error de MongoDB y Mongoose

MongoDB es uno de los SGBD no relacionales lideres del mercado y solemos trabajar con Mongo en proyectos de NodeJS, donde comúnmente trabajamos con Mongoose como ODM para mapear los documentos y trabajar con las bases de datos, colecciones y documentos de manera mas productiva, sin embargo muchos usuarios tienen problemas con estas tecnologias y les generan diferentes errores y warnings en sus proyectos backend.

Por eso, en este artículo te digo enseño a solucionar todos los posibles errores que te pueden surgir al trabajar con MongoDB y Mongoose. Algunos de los problemas que aprenderemos a solucionar son:

  • Arrancar el servidor de Mongo cuando tienes varias versiones instaladas.
  • Problemas de conexión a la base de datos.
  • Warnings con strictQuery
  • No encuentro la consola de MongoDB y como usar Mongo Shell
  • Soluciones varias a problemas de Mongoose
  • Solución a errores con los callbacks en Mongoose
  • Y mucho más

Solución para ejecutar varias versiones de MongoDB

Para solucionar este error deberemos abrir CMD y dirigirnos a la ruta donde tenemos instalado MongoDB, dentro de ahí iremos a la carpeta bin y ejecutaremos este comando:

mongod.exe –dbpath ruta_fisica_DB

En la parte donde pone ruta_fisica_DB deberás indicar la ruta física de donde tienes tu base de datos. Normalmente suele ser C:/data/db, pero si tienes varias versiones tendrás más de una.

De esta forma conseguiremos que la base de datos arranque.

Solución al problema de no encontrar la consola de MongoDB y no encontrar mongo.exe

¿Qué hago si no encuentro mongo.exe? Ahora en ciertas versiones de mongodb no viene instalada por defecto la consola de comandos, entonces lo que deberíamos hacer es instalarla por separado desde este enlace.

Una vez instalado tendrás el comando mongosh disponible para ejecutar en la terminal de tu sistema, para acceder a la consola de mongodb.

Solución a los errores de conexión a MongoDB desde mi proyecto de Node con Mongoose, no se conecta o da un error

Al actualizar a una versión mas reciente puede que nos salga un aviso de las strictQuery, para solucionarlo deberíamos ir al fichero de conexión de nuestro proyecto y antes de realizar la conexión poner esta línea de código:

mongoose.set("strictQuery", false);

Otro posible error es que al intentar conectarte usando localhost te dé un error, para eso deberás utilizar la IP 127.0.0.1 deberá quedar de esta forma:

"mongodb://127.0.0.1:27017/mi_db"

También es posible que te de algún error porque necesita algunos parámetros en ciertas versiones de MongoDb, debes probar esto:

mongoose.connect("mongodb://127.0.0.1:27017/mi_db", {
	useNewUrlParser: true,
	useUnifiedTopology: true,
	useCreateIndex: true
});

En caso de que alguno de estos parámetros te de error, simplemente quítalo y deja los necesarios.

Solución al problema de que Mongoose no deja usar los callbacks

En las versiones más recientes de mongoose ya no se pueden usar los callbacks en ciertos métodos, ahora debemos usar promesas con then o async/await.

Aqui tienes un ejemplo con then en el método findById:

Articulo.findById(id).then((articulo) => {
    // Si no existe devolver error
    if (!articulo) {
        return res.status(404).json({
            status: "error",
            mensaje: "No se han encontrado el artículo"
        });
    }
    // Devolver resultado
    return res.status(200).json({
        status: "success",
        articulo
    });

}).catch((error) => {
    return res.status(404).json({
        status: "error",
        mensaje: "Ha ocurrido un error",
        error
    });
});

Otra forma seria usar el async y el await así:

const listar = async(req, res) => {
    try{
        let consulta = Articulo.find({});

        if (req.params.ultimos) {
            consulta.limit(3);
        }

        let articulos = await consulta.sort({ fecha: -1 }).exec();

        if (!articulos) {
            return res.status(404).json({
                status: "error",
                mensaje: "No se han encontrado artículos!!"
            });
        }

        return res.status(200).send({
            status: "success",
            contador: articulos.length,
            articulos
        });

    }catch(error){
            return res.status(500).json({
                status: "error",
                mensaje: "Se ha producido un error",
                error
            });
    }

}

Como vemos el código es muy similar a como lo hacíamos anteriormente y de esta forma el código nos funcionara sin problemas.

Video tutorial explicando todo paso a paso

En este video te explico un poco más MongoDB, Mongoose y como solucionar sus posibles problemas:

Nos seguimos viendo en mis cursos de desarrollo, en este blog y en mi canal de YouTube 😉

Víctor Robles WEB

Autor: Victor

Desarrollador web - Formador online - Blogger

Compartir este post