MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Node.js, MongoDB - Inserimento/aggiornamento di più documenti e invio di una singola risposta

Potresti provare async modulo per questo. Ha alcuni metodi molto utili per elaborare ogni elemento in una raccolta e offre funzionalità per quando tutta l'elaborazione è terminata.

Ti rimando in particolare alla coda funzione, che ti consente di aggiungere attività a una coda, quindi una volta che tutti gli elementi sono stati elaborati, fai qualcosa.

Ad esempio, potresti fare qualcosa come:

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);
} 

Quindi, se assumiamo che tu abbia il tuo elenco di documenti in una variabile denominata docs , tutto ciò che devi fare per elaborarli tutti è inserirli nella coda.

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

Protip:è necessario eseguire il push di un oggetto contenente il documento in coda. C'è uno strano errore se provi a passare un oggetto scartato.

Ora, se desideri gli stati specifici per ogni documento che elabori in Mongo, questo è totalmente possibile in questo modo. Finché hai istanziato una struttura dati al di fuori della coda, puoi aggiungere statusCodes (ecc.) ad essa mentre ogni elemento viene elaborato e inviare la struttura al client nella drain della coda funzione. Non dovrebbe essere una seccatura.