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

151
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 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