Encontrar nós que possuem todos os intermediários comuns

Estou criando um sistema no qual combinamosorders parastaff. Conceitualmente, umorder é um pedido de pessoa para fazer algum trabalho, e umstaff é uma pessoa que pode fazer esse trabalho. Aorder pode ter um ou maisrequirements (isto é, restrições sobre quem pode fazer o trabalho) e umstaff pode ter mais um maisrequirements (ou seja, qualificações para fazer o trabalho).

Eu estou tentando criar uma consulta cypher que me dará tudostaff que têmtodos dorequirements listados por um dadoorder. Dito de outro jeito, estou tentando encontrar tudostaff nós que estão relacionados a cadarequirement nó que está relacionado a um dadoorder nó.Minha pergunta é: como crio uma consulta cypher para modelar essa lógica de negócios?

Como exemplo, considere os seguintes dados de amostra:

Uma visualização de imagem dos meus dados de amostraAlternativamente, aqui estáum console interativo para meus dados

Olhe para aorderId: 1 nó. tem umrequires relação com dois nós, rotuladosRN eER IV. Em outras palavras, o pedido nº 1 exige que os candidatos tenham a qualificação RN e a qualificação ER IV. Acontece que o membro da equipeEvan (staffId: 1tem ambas as qualificações, então ele deve ser capaz de se candidatar a esse trabalho. O funcionárioTim tem um desses requisitos, mas não ambos, então ele não deve ser capaz de se candidatar a esse trabalho. Além disso,orderId: 2 só tem um requisito, que Evan e Tim ambos têm, então ambos devem ser capazes de se candidatar a esse trabalho.

Então, em essência, se eu começasse com a ordem nº 1, eu gostaria de voltar apenas para Evan. Se eu começasse com a ordem nº 2, eu gostaria de voltar com Evan e Tim *.

A consulta a seguir está no meio do caminho. Ele me dará todos os caminhos exclusivos de um determinado pedido para um requisito de um funcionário por vez. No entanto, ele não verifica se TODO o caminho do requisito está satisfeito (o que significa que no momento ele só funcionará para pedidos que tenham apenas um único requisito):

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

Então, quais são minhas opções? Posso de alguma forma verificar a presença de um número desconhecido de relacionamentos correspondentes? Ou precisarei modelar meus dados de uma maneira diferente?

*Editar: Eu cometi um erro ao configurar meus dados de amostra.Tim deveria ter sido associado comRN de modo que ele se classificou para a ordem # 2.

questionAnswers(2)

yourAnswerToTheQuestion