Как можно сделать запрос?

Есть два документа в БД 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));

. Разумеется понимаю, что решение не оптимальное. Можете предложить наиболее подходящее решение? Имею ввиду просто алгоритм того как стоит сформировать нужный мне массив.


Ответы (0 шт):