Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

212
Vistas
Problema de Upsert al actualizar varios documentos usando una matriz de ID con $in

Esta consulta está haciendo bien el trabajo:

 db.collection.update( { "_id": oneIdProvided }, { $inc: { "field": 5 } },{ upsert: true } )

Ahora me gustaría hacer la misma operación varias veces con diferentes ID, pensé que la buena manera era usar $in y, por lo tanto, probé:

 db.collection.update( { "_id": { $in: oneArrayOfIds} }, { $inc: { "field": 5 } },{ upsert: true } )

El problema es: si una de las ID proporcionadas en la matriz no existe en la colección, se crea un nuevo documento (que es lo que quiero) pero se le atribuirá una ID automática, sin usar la ID que proporcioné y estaba buscando.

Una solución que veo podría ser hacer primero una consulta de inserción con mi conjunto de ID (los que ya existen no se modificarían) y luego hacer mi consulta de actualización con upsert: false

¿Ves una forma de hacerlo en una sola consulta?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Podemos hacer esto realizando múltiples operaciones de escritura usando el método bulkWrite() .

 function* range(start, end, step) { for (let val=start; val<end; val+=step) yield val } let oneArrayOfIds; // For example [1, 2, 3, 4] let bulkOp = oneArrayOfIds.map( id => { return { "updateOne": { "filter": { "_id": id }, "update": { "$set": { "field": 5 } }, "upsert": true } }; }); const limit = 1000; const len = bulkOp.length; let chunks = []; if (len > 1000) { for (let index of range(0, len, limit)) { db.collection.bulkWrite(bulkOp.slice(index, index+limit)); } } else { db.collection.bulkWrite(bulkOp); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda