Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

228
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!