MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Node.js, MongoDB - Insertion/mise à jour de plusieurs documents et envoi d'une seule réponse

Vous voudrez peut-être essayer le async module pour cela. Il dispose de méthodes très utiles pour traiter chaque élément d'une collection et offre des fonctionnalités lorsque tout le traitement est terminé.

Je vous renvoie en particulier à la file d'attente fonction, qui vous permet d'ajouter des tâches à une file d'attente, puis une fois que tous les éléments ont été traités, faites quelque chose.

Par exemple, vous pourriez faire quelque chose comme :

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

Ensuite, si nous supposons que vous avez votre liste de documents dans une variable nommée docs , tout ce que vous avez à faire pour les traiter tous est de les placer dans la file d'attente.

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

Astuce :vous devez pousser un objet contenant le document dans la file d'attente. Il y a une erreur bizarre si vous essayez de passer un objet non emballé.

Maintenant, si vous vouliez les statuts spécifiques pour chaque document que vous traitez dans Mongo, c'est tout à fait possible comme ça. Tant que vous avez instancié une structure de données en dehors de la file d'attente, vous pouvez y ajouter des statusCodes (etc.) au fur et à mesure que chaque élément est traité, et envoyer la structure au client dans le drain de la file d'attente. fonction. Ça ne devrait pas être trop compliqué.