v1.2adapters/sqlite
Tile.JS
Tile.JS

Schema

Defina a estrutura, defaults, normalização e validação dos documentos.

Schema

O Schema define a estrutura dos documentos de uma collection.

É nele que você descreve:

  • tipos de campos
  • obrigatoriedade
  • defaults
  • índices únicos
  • normalização de strings
  • metadados e introspecção

Exemplo completo

src/database/schema/member.ts
import { Schema } from "@tile.js/database";

interface Member {
  _id?: string;
  profile: {
    name: string;
    email: string;
  };
  role?: "admin" | "member";
  visits?: number;
}

export const memberSchema = new Schema<Member>(
  {
    profile: {
      name: {
        type: String,
        required: true,
        trim: true,
      },
      email: {
        type: String,
        required: true,
        unique: true,
        lowercase: true,
      },
    },
    role: {
      type: String,
      enum: ["admin", "member"],
      default: "member",
    },
    visits: {
      type: Number,
      default: 0,
      min: 0,
    },
  },
  {
    timestamps: true,
    versionKey: true,
  },
);

Opções do schema

Prop

Type

Defaults importantes

timestamps e versionKey são true por padrão. Além disso, collection é apenas metadado de introspecção: ela não redefine o nome real usado em database.collection("...").

Campos internos

CampoQuando apareceFunção
_idpor padrãoidentificador do documento
__vcom versionKey !== falsecontrole interno de versão
createdAtcom timestamps !== falsedata de criação
updatedAtcom timestamps !== falsedata da última atualização

Introspecção com describe()

console.log(memberSchema.describe());

Saída resumida:

{
  fields: {
    _id: { type: "String", unique: true, auto: true, required: true },
    "profile.name": { type: "String", required: true, trim: true },
    "profile.email": { type: "String", required: true, unique: true, lowercase: true },
    role: { type: "String", default: "member", enum: ["admin", "member"] },
    visits: { type: "Number", default: 0, min: 0 },
    __v: { type: "Number", default: 0, required: true },
  },
  timestamps: true,
  collection: undefined,
}

O que vale lembrar

  • construtores como String, Number, Boolean, Date, Array e Object são aceitos
  • strings como "String" e "Number" também são aceitas
  • objetos aninhados são convertidos para caminhos com ponto (profile.email)

Próximos passos

On this page