Mongoose
Mongoose es una librería escrita en Node.js para trabajar con MongoDB.
Para instalar Mongoose utiliza algún manejador de paquetes como npm o yarn:
Ó
Asegúrate que MongoDB esté corriendo de forma local. Crea un archivo app.js
con el siguiente contenido:
La primera línea está requiriendo la librería. En la segunda nos conectamos al MongoDB que está corriendo localmente. Por último nos enlazamos al evento error
de mongoose.connection
para saber si ocurrió un error.
El siguiente paso es declarar un schema, que define la estructura que vamos a utilizar en nuestros documentos, y un modelo, que nos va a permitir interactuar con MongoDB:
Más adelante hablaremos un poco más del schema y los diferentes tipos de datos pero primero veamos cómo manipular los documentos de una colección utilizando el modelo.
Manipulando documentos
Una vez has definido el modelo en Mongoose puedes empezar a insertar, buscar, actualizar y eliminar los documentos de una colección.
Creando un documento
Existen varias formas de insertar documentos en una colección. La primera es instanciar el modelo y utilizar el método save
:
Otra forma más corta es utilizar el método create
:
Por último, si deseas insertar varios documentos a la vez puedes utilizar el método insertMany
:
Buscando documentos
Para listar todos los documentos de una colección utiliza el método find
de la siguiente forma:
También puedes utilizar el método find
para filtrar la búsqueda por una o más llaves. Por ejemplo, para buscar todos los artículos que tengan un título específico utilizaríamos lo siguiente:
Para buscar un documento específico utiliza el método findOne
:
Para buscar por _id
existe un método findById
:
MongoDB tiene un poderoso API de búsqueda que podemos utilizar a través de Mongoose. A continuación vamos a ver las partes más importantes pero la referencia completa la puedes encontrar en este enlace.
Comparación
Para realizar comparaciones de números utiliza las llaves $gt
(mayor qué), $lt
(menor qué), $gte
(mayor o igual a), $lte
(menor o igual a). Por ejemplo, para buscar todas las personas con edad entre 17 y 66 utilizaríamos lo siguiente:
Si la sintaxis de búsqueda utilizando JSON te parece muy extraña, Mongoose nos ofrece una forma alternativa de expresar lo mismo encadenando métodos:
Inclusión
Para comparar contra una serie de valores utiliza la llave $in
. Por ejemplo:
También existe un método in
:
Ordenar los resultados
Para ordenar los documentos utiliza el método sort
:
Limitar los resultados
Para limitar los resultados utiliza el método limit
:
Seleccionar llaves
Para seleccionar llaves específicas de un documento puedes pasarle una cadena de texto al método find
como segundo argumento con las llaves que quieres incluir (separadas por espacio):
También existe un método select
:
Contar los resultados
Para contar el número de resultados utiliza el método countDocuments
. Por ejemplo, para contar todos los documentos de una colección utilizaríamos:
Nota: Si la colección es muy grande se recomienda utilizar el método estimateDocumentCount
.
También puedes pasarle algunas condiciones al método countDocuments
:
Actualizando un documento
Para actualizar un documento que tienes en memoria utiliza el método save
. Por ejemplo:
También puedes utilizar el método update
para actualizar uno o más documentos que cumplan con ciertas condiciones sin necesidad de cargarlos en memoria. Por ejemplo, para cambiar el título del documento con título "Artículo 1" utilizaríamos el siguiente código:
El primer argumento es la condición que deben cumplir los registros y el segundo la información que se va a actualizar.
Nota: Por defecto el método update
sólo actualiza el primer documento encontrado. Para actualizar todos debes pasarle la opción multi
:
Eliminando un documento
Para eliminar un documento utiliza el método remove
:
Para eliminar uno o más documentos sin necesidad de cargarlos en memoria utiliza los métodos deleteOne
y deleteMany
:
Schemas
Todo en Mongoose inicia con la definición del schema. Cada esquema define la estructura que van a tener los documentos de una colección. Por ejemplo:
Los tipos que se permiten dentro de un schema son:
String
Number
Date
Buffer (se utiliza para manejar datos binarios)
Boolean
Mixed (cualquier tipo)
ObjectId (se utiliza para generar los ids)
Array
El schema también define los métodos de instancia, métodos estáticos, indices secundarios y middleware.
Métodos de instancia
Cada instancia de un modelo representa un documento de MongoDB. Puedes agregar métodos a los modelos utilizando el objeto methods
. Por ejemplo:
Y ya podemos utlizar el método sobre cualquier instancia de un modelo:
Métodos estáticos
Para agregar métodos directamente al modelo utiliza el objeto statics
. Por ejemplo
Y ahora para utilizar el método estático:
Índices secundarios
MongoDB soporta índices secundarios (índices sobre llaves diferente al _id
):
Atributos virtuales
Puedes agregar atributos que no van a ser persistidos en la base de datos pero que puedes utilizar para aplicarle formato a otros campos o para combinar campos. Por ejemplo
Veamos ahora cómo utilizar el atributo virtual:
Last updated