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

944
Vistas
Consulta de actualización del nodo JS Mongoose dentro del bucle for o foreach, ¿es posible?

Tengo 2 objetos diferentes dentro de una matriz, y quiero usar esos objetos para actualizar una colección en mi mongodb. Así que pensé en usar algo como esto:

 for (i = 0 ; i < array.length ; i++) { Model.update({array[i]._id},{$set : {'credits_pending' : array[i].credits_pending}},false,true) }

Pero solo actualiza el primer valor de mi matriz, es decir, matriz[0]

¿Por qué?

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

0

Por un lado, la actualización (y la mayoría de las demás operaciones) en Mongoose es asíncrona, por lo que debe esperar hasta que finalice la operación antes de continuar. Por lo general, es mejor hacer una operación a la vez en la misma colección. Con el ciclo for , está ejecutando dos operaciones asincrónicas al mismo tiempo en la misma colección, lo que podría generar un comportamiento no deseado.

En segundo lugar, creo que sus argumentos Model.update() están un poco fuera de lugar.

Me gusta usar async.js cuando trabajo con Mongoose, así que a continuación hay un ejemplo de cómo puede actualizar una matriz de objetos uno a la vez.

 var async = require('async'); async.eachSeries(array, function updateObject (obj, done) { // Model.update(condition, doc, callback) Model.update({ _id: obj._id }, { $set : { credits_pending: obj.credits_pending }}, done); }, function allDone (err) { // this will be called when all the updates are done or an error occurred during the iteration });
over 4 years ago · Santiago Trujillo Denunciar

0

No sé cómo se ve su esquema, pero si esa es la única forma de hacerlo, intente algo como:

 //array - your original array async.eachSeries(array, function(rec, callback) { updateRecord(rec._id, rec.credits_pending) .then((updated) => { callback(); }) }, function(err){ //execution comes here when array is fully iterated. }); function updateRecord(id, credits) { return Model.update({array[i]._id},{$set : {'credits_pending' : array[i].credits_pending}}); }

Mongoose respalda internamente la promesa para que no tenga que preocuparse por nada más.
"Nota": para actualizar varios documentos, debe seleccionar alguna propiedad que sea común a todos los documentos. Este enfoque no es correcto y debe diseñar su esquema para evitar tales escenarios. Esta respuesta es en caso de que no tenga otra opción.

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