Llevar una aplicación de Mongoose a TeselaDB

20 minPrincipiante

Te mostramos cómo conectar tus modelos de Mongoose a TeselaDB, comprobar que guardan y leen igual y revisar lo que cambia.

Mongoose se conecta a la base a través del driver oficial de MongoDB para Node.js, así que tus esquemas, tus validaciones y tus consultas siguen igual. Lo que cambia es la cadena de conexión y, en algún caso, un comportamiento de la lista de diferencias con MongoDB.

Lo que vas a construir

Un modelo de Mongoose con su esquema que guarda y lee pedidos en TeselaDB. Con él compruebas que tu aplicación funciona contra el clúster antes de cambiarla entera.

Requisitos

  • Node.js 18 o posterior.
  • Docker y mongosh, para arrancar TeselaDB en tu máquina y mirar los datos.

Prepara el entorno

Shell
docker run -d --name teseladb -p 27017:27017 viuzi/teseladb:latest \
  start --dbpath /data --insecure --insecure-allow-remote --bind_ip 0.0.0.0
export TESELADB_URI="mongodb://127.0.0.1:27017/shop"
mongosh "$TESELADB_URI" --quiet --eval 'db.runCommand({ ping: 1 }).ok'
mkdir pedidos && cd pedidos && npm init -y && npm install mongoose

El contenedor arranca un nodo de TeselaDB sin TLS ni usuarios, que basta para seguir la guía en tu máquina. Cuando mongosh responde 1, el nodo ya acepta conexiones. TESELADB_URI apunta a ese nodo y a la base shop. La última línea crea la carpeta del programa con Mongoose instalado, en su versión 8 o posterior.

1. Cambia la cadena de conexión

En tu máquina, la cadena del entorno ya apunta al nodo local, así que puedes pasar al paso 2. En producción, si tu aplicación lee la cadena de una variable de entorno, basta con darle la de TeselaDB, con el usuario de la aplicación, los nodos del clúster y la CA, como esta:

mongodb://tienda-api:<contraseña>@node-01:27017,node-02:27017/shop?tls=true&tlsCAFile=./ca.pem&authSource=admin

2. Prueba un modelo

Guarda esto como pedido.mjs, con un esquema que valida sus campos y marca las fechas de creación y de cambio:

JavaScript
import mongoose from "mongoose";

const Order = mongoose.model(
  "Order",
  new mongoose.Schema(
    { customer: { type: String, required: true }, total: { type: Number, min: 0 } },
    { timestamps: true },
  ),
);

await mongoose.connect(process.env.TESELADB_URI);
await Order.create({ customer: "Ana", total: 30 });
console.log(await Order.countDocuments({ customer: "Ana" }));
await mongoose.disconnect();

Probarlo

Ejecuta node pedido.mjs. El programa se conecta con Mongoose usando la cadena de TESELADB_URI, crea un pedido de Ana con un total de 30 y después cuenta sus pedidos, así que contra una base vacía escribe el número 1:

1

Después pasa los tests de tu aplicación contra TeselaDB. Si alguno falla, mira primero si depende del orden de un find sin sort, que en TeselaDB devuelve los documentos en el orden de su clave.

Limpiar

JavaScript
db.getSiblingDB("shop").orders.deleteMany({ customer: "Ana" });

Ejecútala en mongosh para borrar los pedidos de prueba, todos con Ana como cliente. Al final borra también el contenedor con la orden de abajo: el nodo guarda los datos dentro, sin volumen, así que con él desaparece todo lo que escribiste durante la guía y el puerto 27017 queda libre.

Shell
docker rm -f teseladb

Siguientes pasos