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 NestJSarrow-up-right, que vamos falar sobre no curso; contudo, um passo de cada vez😎 .

circle-info

Sugestão de leitura, focado no MongoDB: Shannon Bradshaw, Eoin Brazil, Kristina Chodorow. MongoDB: The Definitive Guide: Powerful and Scalable Data Storage 3rd Edição.

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!

circle-info

Desnecessário repetir, estamos nos baseando na documentação oficialarrow-up-right!

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;

ID

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.

circle-info

A linha 4 testa algo muito importante: que o id é um objeto Mongoose. Isso é importante quando usamos populate, ver meu vídeo sobre isso: Usando o populate em mongoosearrow-up-right .

circle-info

Na linha 12, tivemos de modificar comparado com a documentação oficial. Nunca usei path, parece que não funciona.

Last updated