Definindo seu esquema
Nesta página, vamos aprender a definir nosso esquema em Mongoose.
Introdução
Em Mongoose, tudo começa com um Esquema (Schema). Cada esquema mapeia para uma coleção no MongoDB. Adicionalmente, esse esquema defini o formato da coleção e documentos. Quando se trabalha com Mongoose, grande parte dos detalhes do MongoDB são abstraídos, isso fica ainda mais forte se usarmos NestJS, que vamos falar sobre no curso; contudo, um passo de cada vez😎 .
Nosso primeiríssimo esquema😎
Dizem que o primeiro sempre fica: o primeiro beijo💋, o primeiro programa de computador, a primeira língua. Sendo assim, vamos fazer direito. Nosso primeiro esquema abaixo! 😊
Neste esquema, estamos criando um documento que possui vários campos.
const blogSchema = new Schema({
title: String, // String is shorthand for {type: String}
author: String,
body: String,
comments: [{ body: String, date: Date }],
date: { type: Date, default: Date.now },
hidden: Boolean,
meta: {
votes: Number,
favs: Number
}
});
Cada linha define um path, vamos chamar de atributos em PT. Cada atributo tem seu tipo, ou seja, Mongoose é "tipado", como Java. Caso tente chamar tipos diferentes, aparecerá uma mensagem de erro, e não conseguirá salvar;
Na linha 5, temos um vetor de objetos JSON;
Note na linha 6 o uso da palavra
default, isso é uma forma de se colocar um valor caso não seja passado nada; Isso pode ser útil em situações onde ter um valor é importante, mesmo que seja um padrão;Note na linha 8 um objeto dentro de um atributo, deverá ser acessado como
meta.votes, como exemplo. Existem algumas desvantagens de se declarar atributos desta forma, ver documentação oficial para mais detalhes!
Criando seu modelo
Criamos nosso esquema. E agora?🤔 Agora precisamos dizer para o Mongoose salvar nosso esquema!
Usamos o comando mongoose.model(modelName, schema).
Onde:
modelNameé o nome do modelo, será salvo internamente no Mongoose, podendo ser acessado como variável global. O padrão é ser sempre maiúsculo, mas não obrigatório;schemaé o esquema que criamos;
//Schema.js
const Blog = mongoose.model('Blog', blogSchema);
//Estamos prontos para trabalharID
Lembra no "Ligando os motores", testamos os ID, vamos fazer mais alguns testes, como forma de continuar a discussão. Apesar das discussões serem ricas e importantes, nesta primeira edição deste GitBook, não vamos nos aprofundar além disso, pois queremos deixar espaço para falar do Mongoose e dos testes no NestJS!
Vamos fazer dois testes, somente para efeito de discussão.
describe("test 1: Estamos testando se o ID foi adicionado propriamente", () => {
it("O id deve ser adicionado automaticamente", () => {
const doc = { title: "String" }
const esquema = new Blog(doc);
return esquema.save((err, esquema) => {
if (err) return console.error(err);
expect(objectid.isValid(esquema._id)).toBeTruthy();
})
})
})
describe("test 2: Mongoose creates a new _id of type ObjectId to your document.", () => {
it("O id deve ser adicionado automaticamente", () => {
const esquema = new Blog();
expect(esquema._id instanceof mongoose.Types.ObjectId).toBeTruthy();
})
it("Testando id depois de salvar", () => {
const esquema = new Blog();
return esquema.save((err, esquema) => {
if (err) return console.error(err);
expect(esquema._id).toBeTruthy();
})
})
})
Last updated
Was this helpful?