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
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 mongooseEl 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=admin2. 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:
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:
1Despué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
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.
docker rm -f teseladbSiguientes pasos
- ODM y ORM, con Spring Data MongoDB y Beanie.
- Diferencias con MongoDB, por si tu aplicación depende de alguna.