sql >> Databasteknik >  >> NoSQL >> MongoDB

Node.js, MongoDB - Infoga/uppdatera flera dokument och skicka ett enda svar

Du kanske vill prova async modul för detta. Den har några mycket användbara metoder för att bearbeta varje objekt i en samling, och erbjuder funktionalitet för när all bearbetning är klar.

Jag hänvisar dig särskilt till kön funktion, som låter dig lägga till uppgifter i en kö och sedan göra något när alla objekt har bearbetats.

Du kan till exempel göra något 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);
} 

Sedan, om vi antar att du har din lista över dokument i en variabel som heter docs , allt du behöver göra för att bearbeta dem alla är att skjuta upp dem i kön.

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

Protip:du måste trycka på ett objekt som innehåller dokumentet i kön. Det uppstår ett konstigt fel om du försöker passera in ett olindat föremål.

Nu, om du ville ha de specifika statuserna för varje dokument du bearbetar i Mongo, är detta fullt möjligt så här. Så länge du instansierar en datastruktur utanför kön kan du lägga till statuskoder (etc.) till den när varje objekt bearbetas och skicka strukturen till klienten i köns avlopp fungera. Borde inte vara för mycket krångel.




  1. Kort användarvänligt ID för mongo

  2. ställ in fältet som tomt för mongoobjekt med mongoose

  3. Ta bort flera dokument från mongo i en enda fråga

  4. Vad är skillnaden mellan metoden insert(), insertOne() och insertMany()?