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

229
Visualizações
¿Cómo actualizo una matriz de cadenas dentro de una matriz de objetos usando ObjectId en mongodb?

Tengo problemas para entender cómo actualizar la matriz de etiquetas dentro de un objeto de matrices en mongoDB.

Tengo una matriz de objetos y su ObjectID correspondiente cuyas etiquetas me gustaría actualizar en mongoDB. Lo que intenté es usar un ciclo usando updateOne especificando el ObjectID como una consulta para encontrar el Documento respectivo.

Algo como esto:

 nodes.forEach(node => { const query = { '_id' : ObjectId(node.Id) } db.collection(collection).updateOne( query, { $set: { 'tags': value } }, function(err, result) { if (err) { throw err; } console.log(result); }); });

Esto no funcionó desafortunadamente. He intentado otros enfoques pero no pude encontrar nada que funcione

Tengo la siguiente estructura de datos mongodb:

 { "_id": { "$oid": "6022bc9f9b55276bd39f4e0" }, "name": "TestProject", "projectData": { "nodes": [ { "data": { "_id": { "$oid": "6022bc959b559276bd39f4be" }, "nodeData": { "tags": [] } } }, { "data": { "_id": { "$oid": "7022bc959b559276bd39f4ce" }, "nodeData": { "tags": [] } } }, { "data": { "_id": { "$oid": "8022bc959b559276bd39f4de" }, "nodeData": { "tags": [] } } } .... ] }

Me gustaría actualizar solo etiquetas específicas de objetos que coincidan con los que paso como ID de objeto. ¿Cuál sería el mejor enfoque para actualizar un grupo de valores de objeto que coincidan con un ObjectID específico?

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

0

Puede usar el operador posicional filtrado $[<identifier>] identifica los elementos de la matriz que coinciden con las condiciones de arrayFilters para una operación de actualización.

  • Si está actualizando las mismas etiquetas en cada ID de nodo, intente $in condiciones, de lo contrario, puede usar la operación bulkWrite() .
 let value = ["tag1", "tag2"]; let nodes = [ ObjectId("6022bc959b559276bd39f4be"), ObjectId("7022bc959b559276bd39f4ce") ]; db.collection(collection).updateOne( {}, { $set: { "projectData.nodes.$[d].data.nodeData.tags": value } }, { arrayFilters: [ { "d.data._id": { $in: nodes } } ] } )

Patio de recreo

over 4 years ago · Santiago Trujillo Relatório

0

Para completar, quiero agregar mi propia solución a esto. Según la respuesta aceptada, construyo la siguiente operación, ya que cada nodo puede tener etiquetas diferentes y quería poder agregar etiquetas cada vez:

 const ObjectID = require('mongodb').ObjectID; nodes.forEach(node => { updateOneObjectWithTags(db, node._id, "projectData.nodes.$[d].data.nodeData.tags", node.nodeData.tags, "d.data._id", collection).then(result => { console.log(result); }); }); updateOneObjectWithTags: (db, objectId, updateKey, updateValue, arrayFilterKey, collection) => { return new Promise((resolve, reject) => { db.collection(collection).updateOne( {}, { $set: { [updateKey] : updateValue } }, { arrayFilters: [ { [arrayFilterKey]: new ObjectID(objectId) } ] }) resolve(true); });
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