JavaScript:
exports.userWithoutProject = async (req, res, next) => {
try {
let benchUser = [];
const project = await Project.find({})
const users = await User.find({}, {
email: 1,
_id: 0
})
for (let i = 0; i < users.length; i++) {
for (let j = 0; j < project.length; j++) {
for (let k = 0; k < project[j].seats.length; k++) {
if (users[i].email !== project[j].seats[k].employee && project[j].seats[k].employee === undefined) {
benchUser.push(users[i].email)
}
}
}
}
const uniq = [...new Set(benchUser)];
return res.json({
users: uniq
})
} catch (error) {
next(error)
}
}
Пользователи:
[{
email: 'user1@email.com',
}, {
email: 'user2@email.com',
}, {
email: 'user3@email.com'
}]
Проекты (Массив объектов):
{ _id: 5cc2dd2eb3eea7004c9a7240,
name: 'Project One',
description:
'Lorem Ipsum',
start: '2018-06-01T09:45:00.000Z',
end: '2019-12-31T09:45:00.000Z',
seats:
[
{
skills: [Array],
_id: 5cc2e3cab3eea7004c9a724a,
start: '2018-06-01T09:45:00.000Z',
end: '2019-12-31T09:45:00.000Z',
potentialExtension: '2020-06-31T09:45:00.000Z',
role: 'Dev',
approved: true,
workload: 10,
employee: 'user1@email.com'
},
{
skills: [Array],
_id: 5cc2e3cab3eea7004c9a7241,
start: '2018-06-01T09:45:00.000Z',
end: '2019-12-31T09:45:00.000Z',
potentialExtension: '2020-06-31T09:45:00.000Z',
role: 'PM',
approved: true,
workload: 20,
employee: 'user3@email.com'
}
]
}
Моя цель:
Я хочу вернуть всех пользователей, у которых нет места для проекта.
У меня есть несколько проектов, и у каждого проекта есть seat
, где электронная почта пользователя записана в поле employee
.Поэтому мне нужно пройти через все проекты, а также пройтись по каждому месту проекта, чтобы проверить, совпадает или нет мой пользователь.
Мой подход сверху возвращает мне user2@email.com
, что правильно, но также user1@email.com
, что не так 'т.