Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como definir que um objeto seja required

Pessoa, tudo bem?

No curso anterior, na scheme de livro, o valor de autor era o objeto embeded, que recebia autorScheme, mas nesse curso autor está sendo passada como referência. A dúvida é, tem como setar para que autor, sendo uma Schema seja required?

Meu código hoje está assim:

const livroSchema = new mongoose.Schema(
  {
    id: { type: mongoose.Schema.Types.ObjectId },
    titulo: {
      type: String,
      required: [true, "O parâmetro `titulo` é obrigatório"],
    },
    editora: {
      type: String,
      required: [true, "O parâmetro `editora` é obrigatório"],
    },
    preco: {
      type: Number,
      required: [true, "O parâmetro `preco` é obrigatório"],
    },
    paginas: {
      type: Number,
      min: [10, "O número de páginas deve estar entra 10 e 5000"],
      max: [5000, "O número de páginas deve estar entra 10 e 5000"],
    },
    autor: autorSchema,
  },
  { versionKey: false }
);

Tentei fazer :

autor: {
autorSchema,
required: true
}

Mas recebi um "TypeError: Invalid schema configuration: Could not determine the embedded type for array 'autor.require' " na hora de iniciar o server.

1 resposta
solução!

Olá, Matheus! Espero que esteja tudo bem com você.

Entendo a sua dúvida e acredito que posso te ajudar. No Mongoose, quando você quer definir que um campo que é uma Schema seja obrigatório, você pode fazer isso da seguinte maneira:

autor: {
  type: autorSchema,
  required: [true, "O parâmetro `autor` é obrigatório"],
}

No seu caso, você tentou definir o campo autor como obrigatório, mas acabou passando o autorSchema como um objeto, e não como um tipo, o que causou o erro.

Portanto, o seu código deve ficar assim:

const livroSchema = new mongoose.Schema(
  {
    id: { type: mongoose.Schema.Types.ObjectId },
    titulo: {
      type: String,
      required: [true, "O parâmetro `titulo` é obrigatório"],
    },
    editora: {
      type: String,
      required: [true, "O parâmetro `editora` é obrigatório"],
    },
    preco: {
      type: Number,
      required: [true, "O parâmetro `preco` é obrigatório"],
    },
    paginas: {
      type: Number,
      min: [10, "O número de páginas deve estar entra 10 e 5000"],
      max: [5000, "O número de páginas deve estar entra 10 e 5000"],
    },
    autor: {
      type: autorSchema,
      required: [true, "O parâmetro `autor` é obrigatório"],
    },
  },
  { versionKey: false }
);

Espero ter ajudado e bons estudos!