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

157
Views
Promesa de encadenamiento para actualizar un documento de referencia en Mongoose

Dado el siguiente esquema:

 user { uid:12345, name:myname, account=null } account { _id:6789, name:"myaccount", _owner:12345 }

¿Cómo puedo actualizar user.account para tener el valor de su campo de referencia account._owner? Cuando se crea el documento de la cuenta, quiero encontrar y reemplazar el valor de la cuenta de usuario. La ruta que tengo se ve así:

 app.post('/accounts', authenticate, (req, res) => { var account = new Account({ name: req.body.name, _owner: req.body._owner, }); account.save().then((doc) => { //here i wasnt to update a refernce to a // an account field in a User document and set //it to the account.owner created above. res.send(doc); }, (e) => { res.status(400).send(e); }); });

En mi ejemplo, cuando se crea la cuenta, quiero actualizar user.account a 6789 (el valor de la identificación de la cuenta creada)

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Mangosta maneja promesas: http://mongoosejs.com/docs/promises.html

Así que simplemente puedes:

 app.post('/accounts', authenticate, (req, res) => { var account = new Account({ name: req.body.name, _owner: req.body._owner, }); account.save() .then((doc) => User.findOneAndUpdate( { uid: req.body._owner }, { $set: { account: doc._id } }, { new: true } ) .then(() => doc); }).then((account) => { res.send(account); }, (e) => { res.status(400).send(e); }); });
over 4 years ago · Santiago Trujillo Report

0

Otra solución sería adjuntar un gancho a la acción de save del modelo de cuenta.

 var Owner = require('path/to/owner/model'); var schema = new Schema({name:String,_owner:{type: Schema.Types.ObjectId,ref: 'owner'}}); // ref will be useful if you want to use populate later schema.post('save', function(account) { return Owner.findOne({uid:account._owner}) .then(owner => { owner.account = account._id; // assign account id to user return owner.save(); }) });

Luego solo tienes que crear un nuevo objeto de cuenta y el gancho lo hará en segundo plano.

 app.post('/accounts', authenticate, (req, res) => { var account = new Account({ name: req.body.name, _owner: req.body._owner, }); account.save().then((doc) => { res.send(doc); }, (e) => { res.status(400).send(e); }); });

En mi opinión, las rutas se ven más limpias de esta manera, podrías probarlo.

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!