Creando un modelo de datos con MongoDB y Mongoose

github-logo

Repositorio en GitHub con este código

Este primer walkthrough que haré será acerca de MongoDB y como hacer un modelo de datos para una aplicación.

Explicación inicial

Antes de empezar con el código me gustaría explicar varias cosas, como por ejemplo el patrón MVC, y como funciona. MVC son las siglas de Model, View y Controller, que podemos traducir como modelo, vista y controlador. Este patrón lo que hace es dividir una aplicación en esas 3 partes y cada parte se encarga de realizar una función diferente, pero que todos tienen algo en común, que es manejar nuestra lógica de negocio y manipularla según nuestras necesidades.

  • El modelo guarda los datos de nuestra app
  • El controlador procesa esa información
  • La vista muestra al usuario esa información procesada y manipulada

Una vez dicho esto, solo queda aclarar los pasos por los que pasa nuestra app trabajar con la base de datos Mongo.

  1. Se conecta a la base de datos local que tengamos instalada (también puede ser una base de datos remota a través de servicios de terceros)
  2. Definimos los modelos de datos y los Schemas que vamos a emplear en nuestra aplicación
  3. Añadimos información a nuestra BD.
  4. Consumimos esa información en nuestra aplicación para mostrarla y manejarla.

Para conectarnos a la base de datos podriamos usar los controladores propios de MongoDB, que son muy potentes, pero es un lio trabjar con él. Por eso usaremos Mongoose, que nos facilitará muchas cosas en tan solo poquitas líneas de código.

El punto más fuerte de Mongoose es en la forma que nos permite manejar muchas cosas de nuestra base datos desde nuestro codigo, y nos facilita mucho el trabajo de la creación de schemas y los modelos que iremos usando.

Explicado todo esto, vamos al lio.

Instalando Mongoose

Lo primero que tenemos que hacer es instalar mongoose con npm

$ npm install mongoose --save

el argumento –save sirve para guardar mongoose como dependencia en nuestro archivo package.json creado con npm

Una vez instalado/descargado, vamos a crear un archivo llamado db.js en nuestra carpeta de trabajo y en él vamos a requerir a mongoose. 

var mongoose = require('mongoose');

Hacemos esto para modularizar nuestra aplicación y tener las diferentes lógicas separadas. Y así luego desde nuestra aplicación principal las iremos requiriendo y usando.

Vamos a crear otro archivo en la misma carpeta con el nombre app.js y desde ahí requerir nuestro archivo db que creamos antes.

Realizando la conexión con Mongoose

Las conexiones a las bases de datos de MongoDB se hacen con una URI bastante simple:

mongodb://usuario:contrasela@localhost:27027/mibasededatos

Vamos a declarar una variable con esa URI para no tener que escribir siempre la dirección

var dbURI = 'mongodb://localhost/codigodiario';

En este caso, como la base de datos que tengo en local no tiene seguridad ninguna, pues no hace falta que le indique usuario@contraseña

Y nos conectamos a la base de datos con .connect y pasandole la URI que antes habíamos declarado

 mongoose.connection.on('connected', function () {
console.log('Mongoose conectado a ' + dbURI);
});

Creando el modelo de dato

Vamos a volver al archivo db.js y declarar una variable Schema para no tener que escribirlo cada vez que vayamos a hacer un nuevo Schema.

Schema = mongoose.Schema;

Declaramos otra variable como objeto Schema. En mi caso voy a hacer un modelo para un artículo del blog

var Articulo = new Schema({
titulo: {type: String},
contenido: {type: String},
tags: {type: String},
autor: {type: String},
cabecera: {type: String},
creado: { type: Date, default: Date.now }
});

Con el type, le estamos indicando qué tipo de información vamos a guardar en ese campo, podemos poner los siguientes:

  • String – cadena de texto
  • Number – de forma nativa mongo no admite numeros long o double 
  • Date – fecha
  • Boolean – booleanos (false, true)
  • Buffer – información binaria, como las imagenes
  • Mixed – lo que sea
  • Array

También podemos asignarle valores por defecto a los campos, es decir, si no indicamos ningún tipo de información para X campo, se le asignará el predeterminado, como podemos ver en el campo de creado que su valor predeterminado es la fecha y hora en la que se crea el documento.

Ahora sólo nos queda exportar este modelo para que se pueda usar en otros sitios, para eso usaremos el método exports

module.exports = mongoose.model('Articulo', Articulo);

El primer campo es el nombre que le queramos dar al modelo y el segundo es la schema que creamos hace un momento.

Final

Con esto ya tenemos nuestra base de datos con nuestro modelo Articulo que podemos ir rellenando con datos. En este tutorial no voy a entrar con eso, cuando pueda haré otro tutorial sobre como manejar y manipular la información de la BD con la API REST de nuestra aplicacción.

Desarrollador a tiempo completo, amante del buen rol y los juegos de plataforma. Mi tiempo libre me gusta invertirlo para ver series y malas peliculas