Breve explicacion de Mongoose, asi como un codigo con las operaciones CRUD

Overview

Introduccion a Mongoose

¿Qué es MongoDB?

MongoDB es una base de datos NoSQL (Not Only SQL) y por ende no relacional que es utilizado para proyectos web, aplicaciones mobiles, entre otras aplicaciones. MongoDB esta pensado en ser utilizado para Big Data, ya que dentro de las soluciones ofrecidas por MongoDB estan el ofrecer servicios en la nube a traves de clusters (De hecho, el termino mongo viene del termino en ingles humongous que significa enorme).

A diferencia de las bases de datos relacionales, MongoDB es una base de datos basado en documentos, esto significa que a diferencia de las base de datos relacionales donde cada elemento a guardar se representa a traves de una fila de una tabla, un elemento de MongoDB se representa como un objeto tipo JSON denomindao documento

Ejemplo de un documento de una base de datos en MongoDB.

Tambien a diferencia de las base de datos SQL que almacenan sus filas en tablas, MongoDB almacena sus documentos en colecciones, y dichas colecciones son almacenadas en una base de datos.

Modelo de una base de datos.

¿Qué es mongoose?

Mongoose es un Objeto Mapeador de Documentos (Object Document Mapper) que, entre otras cosas, nos permite crear interfaces para gestionar, base de datos, colecciones y documentos.

Las funcionalidades de mongoose estan desde la conexión a una base de datos, hasta la creación de esquemas y modelos, los cuales nos permiten desarrollar un sistema fuertemente tipado para los campos de una colección, parecido a Typescript.

Esquema.

Las bases de datos SQL crean esquemas de documentos al momento de crear la tabla.

CREATE TABLE Empleado (
  empleado_clave INT NOT NULL,
  empleado_nombre VARCHAR(50) NOT NULL,
  empleado_departamento VARCHAR(50) NOT NULL,
  empleado_telefono VARCHAR(50) DEFAULT 'Sin telefono'
);

En mongoose, un esquema es un modelo de datos de un documento, donde su proposito es crear un modelo fuertemente tipado de los datos a manejar.

const {Schema, model} = require('mongoose');
const empleadosEsquema = new Schema ({
  clave: { type: Number, required: true },
  nombre: { type: String, required: true },
  departamento: { type: String, required: true },
  telefono: { type: String, default: "Sin telefono" }
});

La ventaja de definir un esquema es que podemos definir los tipo de datos a como queremos manejarlos en nuestra base de datos, eliminando la posibilidad de que se anexen diferentes tipos a nuestros campos.

Los tipos que maneja un esquema de mongoose son:

  • String: Para cadena de caracteres.
  • Number: Para números de cualquier tipo, sean enteros, flotantes, etc.
  • Date: Para almacenar fechas.
  • Buffer: Para guardar archivos binarios.
  • Mixed: Para guardar cualquier tipo de dato.
  • ObjectId: Para guardar identificadores unicos.
  • Boolean: Para guardar true o false (tambien acepta valores del tipo 'true', 1, '1' y 'yes' y sus valores contrarios a estos para falsos).
  • Arrays: Para guardar arreglos de todos los tipos anteriores (Si queremos guardar un array de strings la sintaxis seria [String]).

Modelos.

Un modelo es un constructor compilado a partir de un esquema, siendo un documento una instancia del modelo creado.

La manera en que podemos crear un documento es a travez de mongoose

const mongoose = require('mongoose');
const esquemaEjemplo = new Schema ({ ... datos ... });
const modeloEjemplo = mongoose.model('ejemplo', esquemaEjemplo);

El primer atributo de la funcion model es el nombre singular de de la colección, pero Mongoose en automatico busca el nombre de la coleccion en plural y en letras minusculas del nombre de la coleccion en la base de datos.

Se recomienda que si se tiene una conexión personalizada se utilice esa conexión para crear el modelo en vez del objeto mongoose.

const mongoose = require('mongoose');
const conexion = mongoose.connect('http://localhost/bdejemplo'); //Se realiza la conexion a una base de datos ya creada.
const esquemaEjemplo = new Schema ({ ... datos ... });
const modeloEjemplo = conexion.model('ejemplo', esquemaEjemplo); //Se crea el modelo utilizando la conexion en vez de mongoose, por si queremos especificar una base de datos.

Con el modelo podemos realizar diferentes consultas a la base de datos tales como:

  • Consultar con el metodo .find(),
  • Borrar con el metodo .deleteOne() si queremos borrar un elemento o .deleteMany() si queremos borrar varios elementos,
  • Actualizar con el metodo .updateOne().
  • Si queremos especificar las condiciones podemos utilizar el metodo .where() para indicar nuestros parametros.
You might also like...

Desafio 21 dias de código proposto pela Rocketseat.

21-days-of-code Desafio 21 dias de código proposto pela Rocketseat. As regras para participar do desafio são: Todos os dias, codar por pelo menos 1h;

Sep 17, 2022

Projeto de código aberto para ajudar as pessoas a ingressarem em carreiras de dados

Bem vinde O que é o Data Career Guide? É um projeto gratuito de guia (não é um curso e nem um livro) para carreiras na área de dados, inspirado no Lea

Dec 30, 2022

Código-fonte do site dos Guardians UFCG.

Guardians UFCG Esse é o repositório com o código-fonte do site dos Guardians UFCG. User Interface Nosso Front-end será baseado nesse documento do Figm

Oct 22, 2022

La extensión web que muestra el precio de los juegos de la web de Xbox, PlayStation, Nintendo y Epic Games Store con los impuestos de Argentina incluidos. Conocé cuanto vas a pagar por tus juegos 💚💙❤️

La extensión web que muestra el precio de los juegos de la web de Xbox, PlayStation, Nintendo y Epic Games Store con los impuestos de Argentina incluidos. Conocé cuanto vas a pagar por tus juegos 💚💙❤️

Conocido anteriormente como Xboxito Impuestito - Conocé el precio real de los juegos Impuestito calcula y muestra el precio de los juegos de la web de

Dec 4, 2022

Questi sono i miei plugin del cazzo, scritti col culo, ma con tanto amore. 50 euro.

ReaperianiJS Questi sono i miei plugin del cazzo, scritti col culo, ma con tanto amore. 50 euro. Spiegone: Il fuorilavoce è un plugin di eq M/S (mid s

Feb 11, 2022

Una mejor mirada a tu perfil de GitHub. ¡Con gráficos!

GithubProfile Este proyecto esta realizado para que tu puedas apreciar de manera simple y sencilla los datos de tu perfil de github. Este proyecto con

Oct 31, 2022

Workshop contruyendo una API Rest con Node.js + Koa.js

Workshop contruyendo una API Rest con Node.js + Koa.js

Workshop contruyendo una API Rest con Node.js + Koa.js Tabla de Contenido Acerca de Introducción Explicación del caso de uso Ciclo de vida de las soli

Apr 8, 2022

Un experimento personal con el portal del Centro de Documentación de la Imagen de Santander.

Un experimento personal con el portal del Centro de Documentación de la Imagen de Santander.

Retrosantander Un experimento personal con el portal del Centro de Documentación de la Imagen de Santander (CDIS) y sus contenidos. Por Jaime Gómez-Ob

Dec 11, 2022

Haciendo una aplicación del tiempo ☁️ con #Angular 13 🅰️

Angular Boilerplate Boilerplate para trabajar con Angular, este proyecto listo para trabajar las pruebas unitarias con Jestjs y eslint. Este proyecto

Apr 20, 2022
Owner
Jair León
Hi, I'm Jair León, a backend developer starting my professional career 😄. I am also a telematics engineering student at UPIITA - IPN 🧑‍🎓 .
Jair León
Konbini Otaku, Web E-Commerce del proyecto Estación Otaku, desarrollada con Next.js y desplegada con Vercel

Konbini Otaku ?? ?? ⛩️ ?? - Reto Final (parte 2) Este proyecto constó de proponer "Konbini Otaku", la cual es una tienda virtual en la que podrás adqu

null 2 Apr 28, 2022
promiseTimeout es como un setTimeout cualquiera, con la diferencia de que retorna una promesa

promiseTimeout es como un setTimeout cualquiera, con la diferencia de que retorna una promesa. Lo que permite un mejor manejo de la asincronía.

Jose Zambrano 4 Nov 4, 2022
API REST de código aberto para testes frontend aplicando CRUD.

OPEN CRUD API API pública para cadastro de usuários para ser usada em testes. Ajustes e melhorias O projeto ainda está em desenvolvimento e as próxima

Pedro Henrique 5 Mar 22, 2022
EL/ASI: Encrypt Locally, Account Secure Interchange

EL/ASI: Local App Security Protocol EL/ASI (Encrypt Locally, Account Secure Interchange) defines a protocol for protecting and exchanging data in loca

Kyle Simpson 59 Dec 28, 2022
Applicacion para guardar, clasificar y acceder facilmente a las notas importantes de mis lecturas.

book-note Applicacion para guardar, clasificar y acceder facilmente a las notas importantes de mis lecturas. Colaboration There is a list of tasks to

null 2 Mar 19, 2022
Repositório com código da segunda live do Santander Coders Web FullStack

CASE WEB APP DE PREVISÃO DO TEMPO Node.js Como iniciar projeto React de maneira simples: Create React App (CRA): npx create-react-app nome_do_app Vite

Let's Code 29 Apr 3, 2022
Implementação do Observer Pattern em TypeScript para o Código Fonte TV

Observer - Design Pattern Exemplos de implementação do Design Pattern Observer, descrito no livro Design Patterns: Elements of Reusable Object-Oriente

Gabriel Froes 11 Nov 30, 2022
Chontaduro, Borojo, Sancocho de gallina y algo sustancia perico fueron usadas para crear el mejor proyecto de código en toda la historia de Colombia

Chontaduro, Borojo, Sancocho de gallina y algo sustancia perico fueron usadas para crear el mejor proyecto de código en toda la historia de Colombia

juansito 6 May 11, 2022
Código de estudo da aula de graphl e apollo no youtube da rocketseat

GraphQL (meu aprendizado) O que é GraphQL uma ferramenta criada dentro do facebook, sendo uma linguagem de realização de query (operações de criação é

Marcos Henrique 1 May 12, 2022
Código open source do Naoki, feito com Node.js utilizando Discord.js.

?? › Sobre o Naoki Naoki é um robô do Discord multiuso com as funções mais necessárias e essenciais para seu servidor! O código do Naoki foi escrito e

Naoki 8 Sep 4, 2022