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

135
Vistas
Mongoose: editar subdocumento profundamente anidado (recursivamente)

Tengo subdocumentos anidados de forma recursiva (matrices), generalmente se parece a:

 parent:{ children:[{ field, children:[{ field, children:[{ ... }] }, { field, children:[{ ... }] }, ...] } }

Lo que significa que cada subdocumento de children puede tener otros subdocumentos de children anidados.

Estoy tratando de editar un subdocumento (llamémoslo "hijo"). Por ejemplo, quiero editar el niño en el nivel 3. Esto significa que necesito bajar 3 niveles de niños, acceder al niño y guardar el documento (padre).

Lo que estoy haciendo ahora es enviar el nivel a la función, junto con la información que quiero agregar al niño. Encuentro el documento ( findOne a la identificación del padre), bajo los niveles, intento editar al niño y finalmente guardo el documento:

 await parentModel.findOne({'_id': parentId}).populate(/*population needed for the information*/) .exec().then(async (result)=>{ let children = result.children; for (let i=0; i<level;i++){ children = children.children; } children.push(child); //in my specific case I simply push the child to the children one level above await result.save((e,doc)=>{...})

Lo que sucede es que veo que children.push(child) tiene éxito, pero el documento no lo guarda (aunque la función de save también tiene éxito).

Supongo que tiene algo que ver con el hecho de que llevo a los children localmente ( let children... ), pero no estoy seguro de si eso es cierto, así que busco consejo.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

cuando cambia una matriz anidada, debe "decirle" a mongoose que se cambió, porque de forma predeterminada no la reconoce.

Puede hacer esto usando markModified('fieldName').

ejemplo:

 parent ---> a mongooose doc parent.child.push({new child object}); parent.markModified('child); parent.save();
about 4 years ago · Juan Pablo Isaza 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