Saltar al contenido principal
Las bases de datos se exponen a través del módulo api.databases, una incorporación de la v4. Están disponibles en los planes Standard, Pro y Enterprise.

Creación de una base de datos

api.databases.create(options) provisiona una nueva base de datos. La password y el certificate se devuelven únicamente en el momento de la creación: guárdalos ahora.
const created = await api.databases.create({
    name: "my-mongo",
    memory: 512,
    type: "mongo",
    version: "7.0",
});

console.log(created.id);
console.log(created.connection_url);
console.log(created.password);     // shown once — store securely
console.log(created.certificate);  // shown once — store securely
CampoTipoDescripción
namestringNombre visible
memorynumberMemoria asignada en MB
typestringSlug del motor (p. ej. mongo, postgres, mysql)
versionstringVersión del motor (p. ej. "7.0")

Listado de tus bases de datos

api.user.get() rellena user.databases con una Collection de todas las bases de datos que posees:
const user = await api.user.get();

for (const [id, db] of user.databases) {
    console.log(`${db.name} (${id}) — ${db.type} ${db.ram}MB`);
}

Obtención de una única base de datos

const db = await api.databases.fetch(created.id);

console.log(db.id);
console.log(db.name);
console.log(db.owner);
console.log(db.type);
console.log(db.ram);
console.log(db.cluster);
console.log(db.port);
console.log(db.createdAt);

Ciclo de vida

await db.start();
await db.stop();

Estado y métricas

const status = await db.getStatus();
console.log(`${status.status} • CPU ${status.usage.cpu} • RAM ${status.usage.ram}`);

const metrics = await db.getMetrics();
console.log(`${metrics.length} metric points (up to 288 over 24h)`);

Resumen de estado de cada base de datos

const all = await api.databases.statusAll();

for (const summary of all) {
    console.log(`${summary.databaseId}${summary.running ? "running" : "stopped"}`);

    // Promote to the full status with .fetch()
    if (summary.running) {
        const full = await summary.fetch();
        console.log(full.usage);
    }
}

Actualización

db.update(options) cambia el nombre visible y/o la asignación de memoria. Debe proporcionarse al menos un campo.
await db.update({ name: "primary-db", ram: 1024 });

Credenciales

db.credentials.certificate() devuelve el certificado TLS (PEM codificado en base64):
const cert = await db.credentials.certificate();
console.log(`Certificate length: ${cert.length}`);
db.credentials.reset(type) rota la contraseña o el certificado.
// Rotate the password — the new value is shown only once
const { password } = await db.credentials.reset("password");
console.log(`New password: ${password}`);

// Rotate the certificate — fetch the new one via .certificate()
await db.credentials.reset("certificate");
const newCert = await db.credentials.certificate();
db.credentials.certificate() y db.credentials.reset() requieren que la base de datos esté en ejecución.

Snapshots

db.snapshots refleja la API de snapshots de las aplicaciones.
import { writeFile } from "node:fs/promises";

const snapshots = await db.snapshots.list();
console.log(`${snapshots.length} snapshots stored`);

const fresh = await db.snapshots.create();
console.log(`Download URL: ${fresh.url}`);

const buffer = await db.snapshots.download();
await writeFile("./db-backup.tar.gz", buffer);

await db.snapshots.restore(
    "00000000-0000-4000-8000-000000000000_mongo",
    "v1",
);
A diferencia de app.snapshots.restore({ snapshotId, versionId }), db.snapshots.restore(snapshotId, versionId) recibe argumentos posicionales.

Eliminación de una base de datos

Eliminar una base de datos es irreversible. Asegúrate de tener un snapshot reciente si es posible que necesites recuperar los datos.
await db.delete();