Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

111
Visualizações
El discriminador de mangosta está ignorando un campo adicional

Entonces, tengo un modelo de Category con tres discriminadores. Uno de ellos, "Asignación", tiene un nuevo esquema para un campo adicional. Sin embargo, cuando se guarda una nueva categoría en la base de datos, ese campo no se guardará, Mongoose lo descarta.

 const CategorySchema = new mongoose.Schema({ name: { type: String, required: [true, "MUST HAVE A NAME"], validate: { validator: isSanitary, message: "NAME CONTAINS ILLEGAL CHARACTERS" } }, amount: { type: Number, required: [true, "MUST CONTAIN AN AMOUNT"] }, removed: { type: Boolean, default: false } }, {discriminatorKey: "kind"}); const Category = mongoose.model("Category", CategorySchema); Category.discriminator("Income", new mongoose.Schema()); Category.discriminator("Bill", new mongoose.Schema()); Category.discriminator("Allowance", new mongoose.Schema({ isPercent: { type: Boolean, required: true } }) ); module.exports = { Income: Income, Bill: Bill, Allowance: Allowance, CategorySchema: CategorySchema };

Requiere el modelo:

 const {Income, Bill, Allowance} = require("../models/category.js");

Código para crear una nueva Categoría:

 /* POST: create a new Category req.body = { account: String (Account id) name: String amount: Number kind: String (Income, Bill, Allowance) isPercent: Boolean } response: Category */ createCategory: function(req, res){ let category = { name: req.body.name, amount: req.body.amount, removed: false }; switch(req.body.kind){ case "Income": category = new Income(category); break; case "Bill": category = new Bill(category); break; case "Allowance": category = new Allowance(category); category.isPercent = req.body.isPercent; break; } res.locals.user.accounts.id(req.body.account).categories.push(category); res.locals.user.save() .then((user)=>{ return res.json(category); }) .catch((err)=>{ console.error(err); return res.json("ERROR: unable to create new category"); }); },

Cuando se guarda una nueva "Asignación", se guarda bien, excepto que isPercent no se guarda en la base de datos. Esto funcionaba anteriormente, pero luego se detuvo cuando hice un pequeño cambio. El único cambio es que comencé a exportar tanto el esquema como el modelo. No tengo ni idea de cómo depurar este problema.

Gracias por cualquier ayuda.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

El problema es que está tratando el modelo de Category de la misma manera que el modelo Allowance de categoría de concesión. No puede guardar isPercent en Category , solo Allowance . Observe en los documentos que cuando quieren crear un modelo discriminador, no usan la base, usan el discriminador. Intente exportar también los modelos discriminadores:

 const Income = Category.discriminator("Income", new mongoose.Schema()); const Bill = Category.discriminator("Bill", new mongoose.Schema()); const Allowance = Category.discriminator("Allowance", new mongoose.Schema({ isPercent: { type: Boolean, required: true } }) ); module.exports = { CategorySchema, Category, Income, Bill, Allowance, };

Luego puede actualizar la lógica en su controlador de ruta para crear una Allowance o Category condicionalmente:

 const { Allowance, Category } = require("../models/category"); // ... // Get correct model based on req.body data const Model = req.body.kind === "Allowance" ? Allowance : Category; let category = new Model({ name: req.body.name, amount: req.body.amount, kind: req.body.kind, isPercent: req.body.kind === "Allowance" ? req.body.isPercent : undefined, });

¡Espero que eso ayude!

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda