Поиск узлов, у которых есть все общие посредники

Я создаю систему, в которой мы сопоставляемorders вstaff, Концептуальноorder это запрос на человека, чтобы сделать некоторую работу, иstaff это человек, который может сделать эту работу.order может иметь один или несколькоrequirements (т.е. ограничения на то, кто может делать работу), иstaff может быть еще одинrequirements (то есть квалификации для выполнения работы).

Я пытаюсь создать запрос шифра, который даст мне всеstaff который имеетвсе изrequirementс указанным даннымorder, Сказал по другому, я пытаюсь найти всеstaff узлы, которые связаны с каждымrequirement узел, который связан с даннымorder узел.Мой вопрос: как мне создать запрос шифра для моделирования этой бизнес-логики?

В качестве примера рассмотрим следующие примеры данных:

Представление изображения моих образцов данныхВ качестве альтернативы здесьинтерактивная консоль для моих данных

Посмотрите накод заказа: 1 узел. оно имеетrequires отношение к двум узлам, помеченыР.Н. а такжеER IV, Другими словами, порядок № 1 требует, чтобы все кандидаты имели квалификацию RN и квалификацию ER IV. Так получилось, что сотрудникEvan (StaffId: 1) имеет обе эти квалификации, поэтому он должен иметь возможность подать заявку на эту работу. СотрудникТим имеет одно из этих требований, но не оба, поэтому он не должен иметь возможность подать заявку на эту работу. Дополнительно,код заказа: 2 есть только одно требование, которое есть у Эвана и Тима, поэтому они оба должны иметь возможность подать заявку на эту работу.

По сути, если бы я начал с заказа № 1, я бы хотел вернуть только Эвана. Если бы я начал с заказа № 2, я бы хотел вернуть Эвана и Тима *.

Следующий запрос находится на полпути. Это даст мне все уникальные пути от данного заказа к сотруднику по одному требованию за раз. Однако он не проверяет, удовлетворен ли КАЖДЫЙ путь требований (что означает, что в настоящее время он будет работать только для заказов, которые имеют только одно требование):

start o=node(2) 
match o-[:requires]->req<-[:hasRequirement]-s 
return o, req, s;

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

*Редактировать: Я допустил ошибку при настройке моих образцов данных.Тим должен был быть связан сР.Н. так что он квалифицирован для заказа № 2.

Ответы на вопрос(2)

Ваш ответ на вопрос