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

136
Visualizações
¿Cómo actualizar múltiples documentos de manera eficiente en función del valor de la propiedad anidada?

De acuerdo, necesito actualizar los documentos en función de los valores de sus valores de propiedad anidados. Supongamos que tengo este documento:

 { "_id": "61e3050a465c380aec9f56a1", "name": "John Doe", "status": "pending", "payment": [ { "status": "completed" }, { "status": "completed" } ] }

Necesito encontrar documentos donde se completed todo el estado de payment.status y cuando se encuentren documentos, entonces necesito actualizar el status externo a completado.

Puedo hacer esto en varias consultas y filtrar las que están completas, pero genera muchas consultas en función de la cantidad de documentos, lo que creo que no es eficiente en términos de rendimiento. Entonces, lo que estaba pensando es si hay una manera de hacerlo en una consulta, puede ser con Aggregate .

Aquí está mi implementación:

 let orders = await Orders.find( {} ).populate( 'payments' ); let completedOrders = orders.filter( ( order ) => order.payments.every( ( payment ) => payment.status === 'completed' ) ); if ( completedOrders.length !== 0 ) { for ( let order of completedOrders ) { await Orders.findByIdAndUpdate( order._id, { "status": "completed" } ); } }
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Puede hacer una actualización con canalización de agregación. Use $map para crear una matriz booleana para indicar si el estado de payment.status está "completado". Luego use $allElementsTrue con $cond para actualizar condicionalmente el campo de status externo.

 db.collection.update({}, [ { "$addFields": { "status": { "$cond": { "if": { "$allElementsTrue": { "$map": { "input": "$payment.status", "as": "s", "in": { $eq: [ "$$s", "completed" ] } } } }, "then": "completed", "else": "$status" } } } } ])

Aquí está el parque infantil de Mongo para su referencia.

over 4 years ago · Santiago Trujillo 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