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

132
Views
Mongoose - Actualizar y devolver subdocumento actualizado

Tengo dos esquemas:

Org

 const schemaOrg= new Schema({ name: String, atts: [schemaAtt], });

y att

 const schemaAtt = new Schema( { isActive: Boolean, name: String, description: String, color: String, icon: String, } );

Si intento actualizar Atts de un documento de la organización

 const updateAtt = async (parent, { input }) => { const attId = input.id; const orgId = input.orgId; const res= await modelOrg.findOneAndUpdate( { _id: orgId, 'atts._id': attId }, {$set:{'atts.$':input}}, { returnDocument: 'after', projection: { _id: 0, atts: 1 }, } ); return res.atts; };

con la siguiente entrada:

 { "input": { "id":"61799ab734465282d39a6570", "organizationId":"615ca4d39a35776c189c1324", "isActive": true, "description": "AC des11", "icon":"wrench" } }

este es el resultado:

 { "id": "6179bd08c35a27df069bd2f4", "name": null, "isActive": true, "description": "AC des11", "color": null, "icon": "wrench" }

En primer lugar, se cambia la identificación!!! y lo que no envié cambió a nulo (color)

La depuración de mongoose muestra que se ejecuta el siguiente comando

 orgs.findOneAndUpdate({ _id: new ObjectId("615ca4d39a35776c189c1324"), 'atts._id': new ObjectId("61799ab734465282d39a6570")}, { '$set': { 'atts.$': { isActive: true, description: 'AC des11', icon: 'wrench', _id: new ObjectId("6179bd08c35a27df069bd2f4"), name: [] } }}, { returnDocument: 'after', upsert: false, remove: false, projection: { _id: 0, atts: 1 }, returnOriginal: false})

tengo 2 preguntas:

  1. ¿Cómo puedo arreglarlo? si corro
 { 'atts.$.isActive': input.isActive, 'atts.$.name': input.name, 'atts.$.description': input.description, 'atts.$.color': input.color, 'atts.$.icon': input.icon, },

en lugar de {$set:{'atts.$':input}}, entonces la actualización está funcionando. ¿Cómo puedo pasar la entrada en lugar de los campos uno por uno?

  1. Quiero proyectar solo el "att" que "se encontró y actualizó" (para ser devuelto). ahora devuelve todos los ats en Org

Gracias por adelantado.

about 4 years ago · Juan Pablo Isaza
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!