sql >> Databáze >  >> NoSQL >> MongoDB

Node.js, MongoDB - Vložení/aktualizace více dokumentů a odeslání jediné odpovědi

Možná budete chtít vyzkoušet async modul pro toto. Má několik velmi užitečných metod pro zpracování každé položky ve sbírce a nabízí funkcionalitu po dokončení veškerého zpracování.

Odkazuji vás zejména na frontu funkce, která vám umožní přidat úkoly do fronty a poté, co byly všechny položky zpracovány, něco udělejte.

Můžete například udělat něco jako:

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

Pak, pokud předpokládáme, že máte seznam dokumentů v proměnné s názvem docs , vše, co musíte udělat pro jejich zpracování, je zařadit je do fronty.

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

Protip:musíte vložit objekt obsahující dokument do fronty. Pokud se pokusíte vložit nezabalený objekt, dojde k podivné chybě.

Nyní, pokud byste chtěli konkrétní stavy pro každý dokument, který zpracováváte v Mongo, je to takto zcela možné. Pokud jste vytvořili instanci datové struktury mimo frontu, můžete do ní přidávat stavové kódy (atd.) při zpracování každé položky a odeslat strukturu klientovi do odvodu fronty. funkce. Nemělo by to být příliš obtížné.




  1. Jak fungují moduly ansible mongodb_user,mongodb_replicaset?

  2. Ukládání System.Type pomocí MongoDb

  3. MongoDB - Projektování pole, které ne vždy existuje

  4. Jak použít proměnnou jako název pole v mongodb-native findAndModify?