Encontrar nodos que tengan todos los intermediarios comunes.

Estoy creando un sistema en el que coincidimos.orders astaff. Conceptualmente, unorder es una solicitud para que la persona haga algún trabajo, y unastaff Es una persona que puede hacer ese trabajo. Unorder puede tener uno o másrequirements (es decir, restricciones sobre quién puede hacer el trabajo), y unastaff puede tener uno másrequirements (es decir, calificaciones para hacer un trabajo).

Estoy intentando crear una consulta de cifrado que me dará todostaff eso tienetodos delrequirements enumerados por un determinadoorder. Dicho de otra manera, estoy tratando de encontrar todo.staff nodos que están relacionados con cadarequirement nodo que está relacionado con un determinadoorder nodo.Mi pregunta es: ¿cómo creo una consulta cifrada para modelar esa lógica de negocios?

Como ejemplo, considere los siguientes datos de muestra:

Una vista de la imagen de mis datos de muestraAlternativamente, aquí estáuna consola interactiva para mis datos

Mira elorderId: 1 nodo. tiene unrequires relación a dos nodos, etiquetadosRN yER IV. En palabras de orden, la orden # 1 requiere que los solicitantes tengan la calificación RN y la calificación ER IV. Sucede que el miembro del personalEvan (staffId: 1) tiene ambas calificaciones, por lo que debe poder solicitar ese trabajo. El miembro del personalTim tiene UNO de esos requisitos, pero no ambos, por lo que no debe poder solicitar ese trabajo. Adicionalmente,orderId: 2 solo tiene un requisito, que tanto Evan como Tim tienen, por lo que ambos deberían poder solicitar ese trabajo.

Así que, en esencia, si tuviera que comenzar con el pedido n. ° 1, me gustaría recuperar solo a Evan. Si tuviera que comenzar con el pedido n. ° 2, me gustaría recuperar a Evan y Tim *.

La siguiente consulta está a mitad de camino. Me dará todos los caminos únicos de una orden dada a un miembro del personal, un requisito a la vez. Sin embargo, no comprueba que TODAS las rutas de requisitos se cumplan (lo que significa que actualmente solo funcionará para pedidos que solo tienen un único requisito):

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

Entonces ¿cuales son mis opciones? ¿Puedo verificar de alguna manera la presencia de un número desconocido de relaciones coincidentes? ¿O necesitaré modelar mis datos de una manera diferente?

*Editar: Cometí un error al configurar mis datos de muestra.Tim debería haber sido asociado conRN para que calificara para el pedido # 2.

Respuestas a la pregunta(2)

Su respuesta a la pregunta