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

403
Visualizações
Mongoose findOneAndUpdate dentro de matrices anidadas

Necesito actualizar el tipo, la clave y los valores en la matriz de 'campos' si el componenteId y el id de wfInstanceId coinciden.

Este es el documento que necesito para hacerlo.

 { "_id": { "$oid": "586b6d756937c22f207dd5af" }, "wfInstanceId": "0111", "workflowId": "ash3", "folderURL": "ash3", "teamName": "teamName", "dataStream": [ { "componentInstanceId": "componentInstanceId1", "componentId": "componentId1", "_id": { "$oid": "586b6d756937c22f207dd5b0" }, "fields": [ { "type": "String", "value": "value1", "key": "key", "_id": { "$oid": "586b6d756937c22f207dd5b1" } }, { "type": "String", "value": "value2", "key": "key1", "_id": { "$oid": "586b6d756937c22f207dd5b1" } } ] }, { "componentInstanceId": "componentInstanceId2", "componentId": "componentId22", "_id": { "$oid": "586b6d756937c22f207dd5b0" }, "fields": [ { "type": "String", "value": "value1", "key": "key", "_id": { "$oid": "586b6d756937c22f207dd5b1" } }, { "type": "String", "value": "value2", "key": "key2", "_id": { "$oid": "586b6d756937c22f207dd5b1" } } ] } ], "id": "38f356f0-d196-11e6-b0b9-3956ed7f36f0", "__v": 0 }

Intenté esto así, también probé $set sobre $push, que tampoco funciona.

 Model.findOneAndUpdate( {'wfInstanceId': '0111', 'dataStream.componentId': 'componentId1'}, {$push : { 'dataStream.fields.$.key' : 'sdsdds' }}, { upsert: true }, function (err, data) { if (err) { reject(err); console.log('error occured' + err); } console.info("succesfully saved"); resolve (data); });

Como describen en este DOC , debería funcionar para el método de actualización que tampoco funcionó para mí. Cualquier ayuda será realmente apreciada para superar este problema que estoy enfrentando.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Como está utilizando el operador $ , actualiza solo el primer elemento de matriz coincidente en cada documento.

A partir de ahora, no es posible en mongoose actualizar directamente todos los elementos de la matriz.

Puedes hacer esto en tu caso:

 db.collection.find({'wfInstanceId': '0111', 'dataStream.componentId': 'componentId1'}) .forEach(function (doc) { doc.datastream.forEach(function (datastream) { if (dataStream.componentId === componentId1) { dataStream.fields.forEach(function(fields){ // you can also write condition for matching condition in field dataStream.fields.key=""; dataStream.fields.value=""; dataStream.fields.type=""; } } }); db.collection.save(doc); });

Es código javascript normal. Creo que es más claro para los novatos de mongo.

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