Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

233
Vistas
No se pudo enviar a [ObjectId] por valor

Por favor ayudame con esto. Tengo una consulta de publicación y quiero guardarla en dos tablas por separado. Pero encontré un mensaje de error del cartero "Transmitir a [ObjectId] falló por valor" ¡Por favor, ayúdenme! ¡Gracias!

Aquí está mi código a continuación:

PrimerModelo

 const mongoose= require('mongoose'); const { Schema } = mongoose; const class = require('./classModel'); const SubjectSchema = new mongoose.Schema({ name: { type: String, unique: true }, address: { type: String, }, classes: [ { type: Schema.Types.ObjectId, ref: class.schema } ]

})

segundo modelo

 const classSchema = new mongoose.Schema({ name: { type: String, unique: true },

})

y aquí está mi controlador

 exports.create = catchAsync (async (req, res, next) => { const newSubject = await Subject.create(req.body) let payload = { body : { ...req.body.classes, _id: new mongoose.Types.ObjectId(), golf_course_id: newGolfCourse._id } } const newClass = await Class.createClass(payload) if(!newClass ) { res.status(201).json({ status: 'success', data : { subject: newSubject } }) }

})

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Es porque está tratando de configurar sus classes en su Subject antes de que tengan ObjectIds . En su Subject Schema tiene la siguiente línea:

 classes: [ { type: Schema.Types.ObjectId, ref: class.schema } ]

Lo que le dice a Mongoose que está haciendo referencia a otro modelo con su ObjectId asignado, pero en su caso, cuando intenta guardarlo:

 await Subject.create(req.body)

Estas clases aún no tienen ID, por lo que debe crearlas. No los configuraría manualmente, cuando la mangosta los configura por sí solo. Así que la siguiente sería una sugerencia.

 try { const classes = req.body.classes.map(async (className) => { const newClass = new Class({ name: className }); newClass.golf_course_id = newGolfCourse._id; await newClass.save(); return newClass; }); const results = await Promise.all(classes); const newSubject = await new Subject({ name: req.body.name, address: req.body.address, classes: results, }); res.send(newSubject); } catch (error) { console.log(error); }

Este método crea las clases tal como las tenía en su código, pero luego le da las clases al Sujeto después de que se hayan creado, de esa manera el Subject puede usarlas. De lo contrario, obtendrá un error de ObjectId porque no puede asignar un campo con una referencia, por ejemplo classes: [ { type: Schema.Types.ObjectId, ref: class.schema } ] sin una reference a ese elemento. Por cierto, en su ref: class.schema solo use ref: 'Class'

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda