Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

132
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda