L oop через большой набор документов и очень быстро обновлять его, если он найден в файле - PullRequest
0 голосов
/ 30 мая 2020

то, что я пытаюсь сделать, - это l oop через большую коллекцию документов очень быстро, что я хочу здесь, это эффективность времени, поэтому у меня есть файл, который имеет около 30 миллионов строк, а набор электронных писем может составлять 500k или 1M max, я хочу проверить, существует ли это электронное письмо в этом файле, а затем обновить массив в этом документе, думая об этом в течение нескольких дней, не находя ничего полезного: это мой код, но он занимает много времени, например, 20 минут или более, я хотите ускорить это, чтобы сделать это как можно быстрее, может быть, 2 минуты или меньше, черт, я работаю с курсорами в mongodb;

 for await(const email of MailBox.find({})) {

    const child = shell.exec(`LC_ALL=C fgrep -m 1 -w ${email.box} file.txt`);

    if(child.stdout.replace('\n','') === email.box){
        email.supp.push(1)
        await email.save()
    }

} 

может кто-нибудь дать мне совет, пожалуйста

EDIT : после того, как я получил некоторые советы из комментариев, это мой новый код, но он все еще занимает так много времени, с 200k документов и файлом с 10M строками, с помощью обратного вызова он стал быстрее, но не так, как хотелось

 for await(const email of MailBox.find({}).select('box supp')) {
   shell.exec(`LC_ALL=C fgrep -m 1 -w ${email.box} file.txt`, async function(code, stdout, stderr) {
        if(stdout.replace('\n','') === email.box){
            mail.supp.push(offer)
            await email.save()
        }
    });
  }
...