MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Node.js, MongoDB - Inserindo/atualizando vários documentos e enviando uma única resposta


Você pode tentar o async módulo para isso. Ele possui alguns métodos muito úteis para processar cada item em uma coleção e oferece funcionalidade para quando todo o processamento for concluído.

Refiro-me em particular à fila função, que permite adicionar tarefas a uma fila e, depois que todos os itens forem processados, faça algo.

Por exemplo, você pode fazer 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);
} 

Então, se presumirmos que você tem sua lista de documentos em uma variável chamada docs , tudo o que você precisa fazer para processá-los é empurrá-los para a fila.
for (var doc in docs) {
  q.push({ doc: docs[doc] }, function(err) {
    if (err) console.log(err);
  })
}

Dica:você precisa enviar um objeto contendo o documento na fila. Há um erro estranho se você tentar passar um objeto desempacotado.

Agora, se você quiser os status específicos para cada documento que você processa no Mongo, isso é totalmente possível assim. Contanto que você tenha instanciado uma estrutura de dados fora da fila, você pode adicionar statusCodes (etc.) a ela à medida que cada item é processado e enviar a estrutura para o cliente no dreno da fila função. Não deve ser muito incômodo.