Как можно сделать запрос?
Есть два документа в БД MongoDB: Vacancies и Technologies. У которых структура
Пример Vacancies:
{
name: "React dev",
techs: ["React.js", "Redux", "Tailwind"],
date: "2022-01-01",
grade: "Senior"
},
Пример Technologies:
{id: "bbbb-2222-2222", name: "React.js"},
Задача стоит такая: нужно вернуть массив в котором будут объекты с информацией о том, сколько раз и в каких датах каждая технология упомянута в вакансиях для каждого уровня: Junior, Middle, Senior. С mongo не особо знаком, а задачу нужно решить поскорее и не придумал ничего лучше как выбрать все записи Technologies и все записи Vacancies и несколькими встроенными итерациями формирую нужный объект для каждой записи конечного массива. Вот тут пример с замоканными данными и решением как в проекте c
const vacanciesByTech = (vacancies, techs) =>{
const byTech = techs.map(tech => {
const jobsByTech = vacancies.filter(job => job.techs.includes(tech.name));
const obj = {};
for(const data of jobsByTech){
if(!obj[data.grade]) obj[data.grade] = [data.date];
else obj[data.grade].push(data.date);
}
tech["total"] = obj;
return tech;
})
return byTech;
}
const vacancies = [
{name: "PHP dev", techs: ["PHP", "Laravel", "MySQL"], date: "2022-01-01", grade: "Junior"},
{name: "Laravel dev", techs: ["PHP", "Laravel", "MySQL"], date: "2023-01-03", grade: "Senior"},
{name: "PHP/Laravel dev", techs: ["PHP", "Laravel", "MySQL"], date: "2023-01-03", grade: "Senior"},
{name: "React dev", techs: ["React.js", "Redux", "Tailwind"], date: "2022-01-01", grade: "Senior"},
{name: "Node.js dev", techs: ["Node.js", "Nest.js", "Express.js", "PostgreSQL"],date: "2022-08-01", grade: "Senior"},
{name: "MERN dev", techs: ["Node.js", "Express", "React.js", "Redux", "PostgreSQL"], date: "2022-01-11", grade: "Middle"},
]
const tech = [
{id: "aaa-1111-1111", name: "PHP"},
{id: "bbbb-2222-2222", name: "React.js"},
{id: "cccc-3333-3333", name: "PHP"},
{id: "dddd-4444-4444", name: "Node.js"},
]
console.log(vacanciesByTech(vacancies, tech));
. Разумеется понимаю, что решение не оптимальное. Можете предложить наиболее подходящее решение? Имею ввиду просто алгоритм того как стоит сформировать нужный мне массив.