Мангуста Курсор и rxJS;http массовый запрос из коллекции - PullRequest
1 голос
/ 25 июня 2019

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

У меня есть следующий код с довольно простой логикой.Я помещаю все документы из коллекции в массив 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), и в соответствии с этим вопросом: { курсор мангусты 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 вРеактивный способ без заполняющей RAM }, который также имеет отношение к моей проблеме, и я понимаю логику, но не синтаксис этого.Я также знаю, что переменная cursor не является документом. Я ничего не могу сделать полезной с ней.Или на самом деле я мог бы?

  1. rxJS bufferCount - довольно интересный оператор
  2. https://gist.github.com/wellcaffeinated/f908094998edf54dc5840c8c3ad734d3 вероятное решение?
...