Collections
Crie e gerencie Collections utilizando Schemas
Collections
Uma Collection é onde os documentos são armazenados.
Toda Collection pertence a uma Database e utiliza um Schema para validar os dados inseridos.
Uma Collection é semelhante a uma tabela em bancos de dados relacionais, porém armazena documentos em vez de linhas.
Criando uma Collection
Primeiro crie um Schema.
import { Schema } from "@tilejs/database";
interface Member {
_id?: string;
name: string;
email: string;
}
export const memberSchema = new Schema<Member>({
name: {
type: String,
required: true,
},
email: {
type: String,
unique: true,
},
});Depois registre a Collection na Database.
import { Database } from "@tilejs/database";
import { memberSchema } from "./schema";
const connection = new Database();
export const database = Object.assign(connection, {
members: connection.collection<Member>("members", memberSchema),
});Agora a Collection poderá ser utilizada normalmente.
Estrutura criada
Na primeira execução o TileJS cria automaticamente todos os arquivos necessários.
O que cada arquivo faz?
| Arquivo | Descrição |
|---|---|
_schema.json | Descrição completa do Schema. |
_collection_index_id.json | Índice do campo _id. |
_collection_index_<campo>.json | Índice de qualquer campo marcado com unique: true. |
*.bson | Documentos armazenados pela Collection. |
Métodos disponíveis
Após criar uma Collection você terá acesso aos principais métodos.
Prop
Type
Exemplo
const member = await database.members.insertOne({
name: "Israel",
email: "israel@gmail.com",
});
console.log(member);Buscar um documento.
const member = await database.members.findOne({
email: "israel@gmail.com",
});Atualizar.
await database.members.updateOne(
{
email: "israel@gmail.com",
},
{
name: "Israel Rabbi",
}
);Remover.
await database.members.deleteOne({
email: "israel@gmail.com",
});Índices
Sempre que um campo possuir unique: true, a Collection criará automaticamente um índice.
const schema = new Schema({
email: {
type: String,
unique: true,
},
});Será criado:
_collection_index_email.jsonExemplo:
{
"israel@gmail.com": "6a3deee44f73903377c3cf0f"
}Esses índices permitem localizar documentos rapidamente e impedir valores duplicados.
Descrevendo o Schema
A Collection possui acesso direto às informações do Schema.
console.log(database.members.describeSchema());Resultado:
{
fields: {
_id: {...},
name: {...},
email: {...},
__v: {...}
},
timestamps: true,
collection: undefined
}Organização recomendada
src/
├── database.ts
├── schemas/
│ └── member.ts
├── collections/
│ └── member.ts
└── index.tsSeparar Schemas e Collections facilita a manutenção conforme o projeto cresce.
Próximo passo
Agora que sua Collection está criada, você pode começar a inserir, consultar, atualizar e remover documentos.