Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

226
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!