javascript — Курсор Мангуста и rxJS; http массовый запрос из коллекции

Мангуста Курсор и rxJS; http массовый запрос из коллекции

У меня есть проблема, которая имеет отношение к rxJS и массовым HTTP-запросам из огромной коллекции (1M документы)

У меня есть следующий код, с довольно простой логикой. Я allPlayers все документы из коллекции в массив allPlayers и одновременно allPlayers 20 запросов http в API (думаю, вы понимаете, почему он ограничен). Итак, код работает нормально, но я думаю, что пришло время отказаться от этого:

  const cursor = players_db.find(query).lean().cursor(); cursor.on('data', function(player) { allPlayers.push(player); }); cursor.on('end', function() { logger.log('warng',`S,${allPlayers.length}`); from(allPlayers).pipe( mergeMap(player => getPlayer(player.name, player.realm),20), ).subscribe({ next: player => console.log(`${player.name}@${player.realm}`), error: error => console.error(error), complete: () => console.timeEnd(`${updatePlayer.name}`), }); }); 

На данный момент, я использую find с cursor с ( batchSize ), но, как я, если я понял это право (через .length ), и в соответствии с этим вопросом: { mongoose cursor batchSize } batchSize это просто способ оптимизации, и это не верните мне массив X документов.

Так что мне теперь делать и какого оператора выбрать для rxJS ?

Например, я мог сформировать массивы необходимой длины (например, 20) и перенести их в rxJS как я использовал это раньше. Но я думаю, что должен быть другой способ, где я мог бы использовать rxJS внутри for promise loop

  const players = await players_db.find(query).lean().cursor({batchSize: 10}); for (let player = await players.next(); player != null; player = await players.next()) { //do something via RxJS inside for loop } 

Также я нашел этот вопрос { Лучший способ запросить все документы из коллекции mongodb реактивным способом без переполнения оперативной памяти }, который также имеет отношение к моей проблеме, и я понимаю логику, но не синтаксис этого. Я также знаю, что cursor переменная не является документом, и я не могу ничего с этим сделать. Или на самом деле я мог?

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector