sql >> Base de Datos >  >> NoSQL >> MongoDB

Node.js, MongoDB:insertar/actualizar varios documentos y enviar una sola respuesta

Es posible que desee probar async módulo para esto. Tiene algunos métodos muy útiles para procesar cada elemento de una colección y ofrece funcionalidad para cuando haya terminado todo el procesamiento.

Te remito en particular a la cola función, que le permite agregar tareas a una cola, luego, una vez que se hayan procesado todos los elementos, haga algo.

Por ejemplo, podría hacer algo como:

var q = async.queue(function(task, callback) {
  // task.doc would contain your individual doc to process

  // your insert / update logic goes here...

  // Callback signifies you're done with this task
  callback();

}, 2) // <--- this number specifies the number of tasks to run in parallel

q.drain = function() {
  // this is the queue's callback, called when the queue is empty,
  // i.e. when all your documents have been processed.

  res.send(statusCode, message);
} 

Entonces, si asumimos que tiene su lista de documentos en una variable llamada docs , todo lo que necesita hacer para procesarlos todos es enviarlos a la cola.

for (var doc in docs) {
  q.push({ doc: docs[doc] }, function(err) {
    if (err) console.log(err);
  })
}

Consejo profesional:necesitas empujar un objeto que contiene el documento en la cola. Hay un error extraño si intenta pasar un objeto sin envolver.

Ahora, si quisiera los estados específicos para cada documento que procesa en Mongo, esto es totalmente posible así. Siempre que haya instanciado una estructura de datos fuera de la cola, puede agregarle códigos de estado (etc.) a medida que se procesa cada elemento y enviar la estructura al cliente en el drenaje de la cola. función. No debería ser mucha molestia.