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

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