TileJS
TileJS
Database

Schema

Defina a estrutura e as regras dos documentos

Schema

O Schema define a estrutura dos documentos de uma Collection.

Além dos tipos dos campos, ele também controla validações, valores padrão, índices únicos e configurações como timestamps.


Criando um Schema

src/schema.ts
import { Schema } from "@tilejs/database";

interface Member {
  _id?: string;
  name: string;
  email: string;
  age?: number;
}

export const memberSchema = new Schema<Member>({
  name: {
    type: String,
    required: true,
    trim: true,
  },

  email: {
    type: String,
    required: true,
    unique: true,
    lowercase: true,
  },

  age: {
    type: Number,
    min: 0,
  },
});

Configuração de campos

Prop

Type


Opções do Schema

O construtor também aceita opções para controlar o comportamento da Collection.

const schema = new Schema(
  {
    name: String,
  },
  {
    timestamps: true,
    versionKey: true,
    _id: true,
    collection: "members",
  }
);

Prop

Type


Campos internos

Por padrão, o TileJS adiciona automaticamente alguns campos.

CampoDescrição
_idIdentificador único do documento.
__vControle interno de versão.
createdAtData de criação (quando timestamps está ativo).
updatedAtData da última atualização (quando timestamps está ativo).

Índices únicos

Todo campo definido com unique: true recebe automaticamente um índice próprio.

email: {
  type: String,
  unique: true,
}

Isso gera:

_collection_index_email.json

Conteúdo:

_collection_index_email.json
{
  "john@example.com": "68526dba05db8ec36dcb33d8"
}

Os índices são utilizados para impedir valores duplicados e acelerar consultas por campos únicos.


Descrevendo um Schema

O método describe() retorna uma descrição completa do Schema.

console.log(memberSchema.describe());

Saída:

{
  fields: {
    _id: { ... },
    name: { ... },
    email: { ... },
    age: { ... },
    __v: { ... }
  },
  timestamps: true,
  collection: undefined
}

Próximo passo

Agora que você criou um Schema, é hora de utilizá-lo em uma Collection.

On this page