Cuando pensamos en bases de datos no relacionales (noSQL), lo primero que se nos viene a la mente es mongoDB, y claro durante mucho tiempo ha estado entre las bases de datos mas populares porque ofrece una escalabilidad y flexibilidad interesante, gracias a la indexación avanzada y la facilidad de uso. Por todo ello en el dev sin site nos animamos a realizar un post sencillo y de calidad para que puedas conectar tu proyecto de nodeJS a mongo sin dolores de cabeza. Vamos al código!

Bien, para esto, estamos considerando que ya tienes mongoDB instalado y corriendo, así que podemos empezar a programar y continuar con toda la chicha.

Conectar a mongoDB nativamente

Para realizar una conexión nativa, vamos a aprovechar el driver oficial para node, que proporciona callbacks y promesas, básicamente utiliza al máximo las nuevas características desde ES6.

Instalar paquete mongodb

Ubícate en al raíz de tu proyecto y ejecuta el siguiente comando.

npm install mongodb --save
Comando para instalar y guardar el paquete mongodb

En tu package.json debes observar que se a registrado el paquete en la clave "dependencies":

Configurar conexión

Básicamente crearas un archivo connection.js, allí es donde se debe importar la librería mongoDB, y empezar a configurarla.

const { MongoClient } = require('mongodb');

// Nombre de bd
const dbName = 'testDB';
// Conexión URL (estas corriendo en local :D)
const url = 'mongodb://localhost:27017';

const client = new MongoClient(url, {
  useUnifiedTopology: true
});

module.exports = async () => {
  // Conectamos al servidor
  await client.connect();

  return client.db(dbName); // retornamos la conexión con el nombre de la bd a usar
};
Configuración de conexión a mongoDB

Exponemos una función asíncrona de tal forma que podamos esperar a que se establezca la conexión.

Probando la ejecución

En este paso ya vamos con las pruebas y simplemente debes importar el archivo de conexión en el index.js:

const connection = require('./connection');

const init = async () => {
  const db = await connection(); // obtenemos la conexión

  await db.collection('user').insertOne({ // insertamos un usuario
    name: 'devsin.site'
  });
};

init();
Ejecutando la inserción de un nuevo registro

Nótese que estamos creando una función asíncrona init, para poder ejecutar el await dentro de ella, finalmente lineas mas abajo la ejecutamos sin ningún problema.

Puedes comprobar en tu bd que ahora existe ese nuevo registro:

Registro en la base de datos

Conectar a mongoDB usando mongoose

Mongoose es una solución que se basa en esquemas para los modelas los datos de mongo (ODM), aparte de ello ofrece la conversión de tipo ya incorporada y validación de datos antes de ingresar algún registro. En resumen simplifica muchas de los cosas que son repetitivas pero nos amarra a un esquema definido. Continuemos con el ejemplo:

Instalar paquete mongoose

Instalamos el paquete como toda la vida.

npm install mongoose --save
Comando para instalar y guardar paquete mongoose

De igual forma en el package.json debe reflejarse el nuevo paquete, al momento de este post la ultima versión es 5.8.2.

Configurar la conexión

Esta vez el archivo javascript de conexión (connection.js) en nuestro código será mucho mas pequeño, pero lo suficientemente potente para conectar a la base de datos:

const mongoose = require('mongoose');
// colocamos la url de conexión local y el nombre de la base de datos
mongoose.connect('mongodb://localhost:27017/testDB', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});
Configuración de conexión a mongoDB usando mongoose

Esta vez asumimos que la conexión fue exitosa, sin embargo si deseas verificar si se ha podido conectar correctamente, puedes agregar el siguiente código que te indicara si logró hacerlo correctamente o se produjo algún error:

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:')); // enlaza el track de error a la consola (proceso actual)
db.once('open', () => {
  console.log('connected'); // si esta todo ok, imprime esto
});
Verificar conexión correcta a mongoDB

Definir un schema

Como lo gritamos lineas anteriores, es necesario definir un esquema (schema), con todas las propiedades / atributos requeridos para el documento que vamos a agregar mas adelante, el siguiente es el archivo user.js.

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
  name: String
});

const User = mongoose.model('User', userSchema);

module.exports = User;
Declaración de un esquema en mongoose

En el ejemplo luego de definir el esquema de usuario debes pasárselo a la función model de mongoose indicándole obligatoriamente el nombre de la colección, ese nombre será pluralizado en inglés, así que tenlo en cuenta.

Probando 1, 2..1, 2

Finalmente en index.js lo único hay que hacer es importar la conexión y el esquema del usuario, creamos un objeto como siempre en el javascript de toda la vida y finalmente ejecutamos save() para almacenarlo.

require('./connection'); // importa el archivo de conexión
const User = require('./user'); // importa el esquema

const user = new User({ name: 'eldevsin.site' }); // crea la entidad
user.save(); // guarda en bd
Creando una entidad en mongoDB

Dale un vistazo a tu BD, el nuevo registro ahora esta allí:

Nuevo registro en mondoDB

Como puedes notar hay cierta diferencia en utilizar un driver nativo que utilizar un paquete como mongoose, así que selecciona uno según tus requerimientos, esta parte es muy importante, sobretodo si tu aplicación está enfocada a crecer.

Gif by Giphy

Y eso es todo!, si te consideras que este post te aportó valor, compártelo para que ayudar a muchas más personas, no olvides comentarnos e incluso te rogamos dejarnos un feedback, nos vemos en una próxima entrega.