Está en la página 1de 33

Programador Web Avanzado

Clase N° 5: Mongoose

Profesor: Ing. Leandro Rodolfo Gil Carrano


Email: leangilutn@gmail.com
Schema Types
Mongoose – Schema type
Los tipos de datos que se puede declarar en el schema son los
siguientes:
•String
•Number
•Date
•Buffer
•Boolean
•Mixed
•ObjectId
•Array
•Decimal128
•Map
Mongoose – Schema type (Índices)
•index: boolean, establece un indice con el campo especificado.
•unique: boolean, define un indice de tipo unique
Mongoose – Schema type (String)
•lowercase: Se aplica minúsculas a toda consulta
•uppercase: Se aplica mayúsculas a toda consulta
•trim: Quita espacios al elemento aplicado en las consultas
•match: Valida la expresion regular especificada
•enum: Crea un validador en base al array especificado
•minlength: Valida que el numero de caracteres sea mayor al
especificado
•maxlength: Valida que el numero de caracteres sea menor al
especificado
Mongoose – Schema type (String)

Se puede declarar el tipo con la clase “String” o como ‘String’

El metodo toString() permite convertir a string cualquier valor


(excepto arrays)
Mongoose – Schema type (number / date)
•Min: Valida que el numero ingresado sea mayor al establecido
•Max: Valida que el numero ingresado sea menor al establecido
Mongoose – Schema type (number / date)

Se puede declarar el tipo con la clase “Number” o como


‘Number’
Modificadores
Mongoose – Modificadores propios
Set
Por ejemplo tenemos el campo sitioweb que deberia comenzar
con ‘http://’ o con ‘https://’, pero en lugar de
forzar al cliente a agregar esto en la UI, puedes escribir un
modificador personalizado que valide la existencia de estos
prefijos y los agregue cuando sea necesario. Para agregar tu
modificación personalizado necesitaras crear el nuevo campo
sitio web con una propiedad set.

Cada usuario creado tendrá una url de un sitio web bien


formada que se modifica en tiempo de creacion.
Mongoose – Modificadores propios
Mongoose – Modificadores propios
Get
Los modificadores getter se usan para modificalos los datos
existentes antes de enviar los documentos a la siguiente capa.
Por ejemplo en nuestro ejemplo previo un modificador getter a
veces seria mejor cambiar el documento de usuario ya
existenque modificando su campo sitioweb en tiempo de
busqueda, en lugar de recorrer toda la coleccion MongoDB
actualizando cada componente.

Con el método UserSchema.set('toJSON', {getters: true});


habilitamos para que todas en todos los json devueltos por las
consultas se aplica el getter
Mongoose – Modificadores propios
Atributos
Virtuales
Mongoose – Virtuales
Algunas veces puedes queres tener propiedades de los
documentos calculadas dinamicamente, las cuales no estan
realmente presentes en el documento. A estas propiedades se
le llaman atributos virtuales y se pueden usar para obtener
requisitos comunes.

Por ejemplo digamos que quieres agregar un nuevo campo


nombreCompleto, que represente la concatenacion del nombre
y del apellido del usuario. Para ello usaremos el metodo virtual()
Mongoose – Virtuales

Retornara en el json un nuevo atributo del documento


denominado “nombreCompleto”
Mongoose – Virtuales
Pero los atributos virtuales pueden tambien tener setters para
ayudar a tus documentos como prefieras en lugar de solamente
agregar mas atributos. En este caso digamos que quieres
romper la entrada del campo nombreCompleto en sus campos
nombre y apellido.
Mongoose – Virtuales
Índices
Mongoose – Modificadores propios
MongoDB soporta varios tipos de índices para optimizar la
ejecución de las búsquedas. Mongoose también soporta la
funcionalidad de indexado e incluso nos permite definir índices
secundarios.

El ejemplo básico de indexación es el índice único, el cual valida


la unicidad de un campo de un documento en una colección. En
nuestro ejemplo es común que los nombres de usuario sean
únicos, así que vamos a modificar la definición de
UsuarioSchmea para realizar esto
Mongoose – Modificadores propios
Mongoose – Modificadores propios
Mongoose también soporta la creación de índices secundarios
usando la propiedad index. Así si por ejemplo sabes que tu
aplicación tendrá muchas búsquedas que conllevan al campo
email, podrás optimizar estas búsquedas creando un índice
secundario email
Mongoose – Modificadores propios
Populate
Mongoose – Populate
Imaginemos una base de datos relacional de libros. Tendríamos
una tabla con los títulos de los libros y otra con los datos de los
autores. El campo autor en la tabla de libros, apuntaría a un ID o
clave primaria de un autor de la tabla autores.
Mongoose – Populate
supongamos un modelo sencillo para libro de la siguiente
manera:
Mongoose – Populate
supongamos un modelo sencillo para libro de la siguiente
manera:

Si nos fijamos, para el campo autor en el modelo libro hemos usado el


tipo Schema.ObjectId y la referencia al modelo Autor. Esto nos permitirá
establecer la relación entre un campo de una tabla y otra.
Mongoose – Populate
Para consultar los datos lo haremos de la siguiente manera:

Luego aplicamos método populate dentro del callback de libros


Mongoose – Populate
Para consultar los datos lo haremos de la siguiente manera:

Luego aplicamos método populate dentro del callback de libros


Mongoose – Populate
La línea Autor.populate(libros, {path: "autor"},...); toma el array de objectos libros y le
indica que en la ruta autor lo "popule" con los datos del modelo Autor. Quedando una
respuesta más completa como este ejemplo:
Mongoose – Populate
En el caso de querer querer guardar datos se debe asociar al campo autor de un libro
un object id valido, por ejemplo:
Mongoose – Populate
Utilizando async / await
Mongoose – Populate
Utilizando async / await

También podría gustarte