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

Node.js, MongoDB - Indsættelse/opdatering af flere dokumenter og afsendelse af et enkelt svar

Du vil måske prøve async modul til dette. Det har nogle meget nyttige metoder til at behandle hvert emne i en samling, og tilbyder funktionalitet, når al behandling er afsluttet.

Jeg henviser dig især til køen funktion, som lader dig tilføje opgaver til en kø, og derefter gøre noget, når alle elementer er blevet behandlet.

For eksempel kan du gøre noget som:

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

Hvis vi så antager, at du har din liste over dokumenter i en variabel ved navn docs , alt hvad du skal gøre for at behandle dem alle er at skubbe dem ind i køen.

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

Protip:du skal skubbe et objekt indeholder dokumentet i køen. Der er en mærkelig fejl, hvis du prøver at passere en uindpakket genstand.

Nu, hvis du ville have de specifikke statusser for hvert dokument, du behandler i Mongo, er dette fuldstændig muligt på denne måde. Så længe du instansierede en datastruktur uden for køen, kan du tilføje statuskoder (osv.) til den, efterhånden som hvert element behandles, og sende strukturen til klienten i køens afløb fungere. Det burde ikke være for meget besvær.




  1. Hvordan får man indlejret mongodb til at beholde dataene ved nedlukning af applikationer?

  2. Ugyldig operator '$size' i aggregering

  3. Meteor / ReactJS - UI blinkende problem:gengivelse to gange før og efter kontrol af en database

  4. Kan ikke få Mongoose.js Subdocument Array til at udfylde