Выполнение запроса поиска для всех значений в массиве - PullRequest
1 голос
/ 17 марта 2020

Допустим, у меня есть массив студенческих идентификаторов, и я хочу проверить, все ли они действительны в моей базе данных. Также известно, каких из них нет в БД, и затем поместите их в массив с именем faulty.

let studentIDS = [435,345,343,654];
let faulty = [];

studentIDS.forEach(i=>{
  StudentSchema.findOne(i).then(res=>{
    if(!res) faulty.push(i);
  })
})

При таком подходе возникает ошибка, поскольку запрос поиска асинхронный и forEach l oop достиг конца до выполнения запросов. Кто-нибудь может мне помочь с этим?

1 Ответ

0 голосов
/ 17 марта 2020

Не запускайте запрос к вашей базе данных в al oop. В этом случае вы можете использовать оператор $ in , чтобы получить идентификаторы совпадающих документов базы данных, а затем выполнить простой .filter(), чтобы найти недостающие:

let studentIDS = [435,345,343,654];

let result = await StudentSchema.findOne({ _id: { $in: studentIDS } }, { _id:1 });
let resultIds = result.map(x => x._id);

let missing = studentIDS.filter(id => resultIds.indexOf(id) === -1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...