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
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
| Campo | Quando aparece | Função |
|---|---|---|
_id | por padrão | identificador do documento |
__v | com versionKey !== false | controle interno de versão |
createdAt | com timestamps !== false | data de criação |
updatedAt | com timestamps !== false | data 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,ArrayeObjectsão aceitos - strings como
"String"e"Number"também são aceitas - objetos aninhados são convertidos para caminhos com ponto (
profile.email)