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 delrequirement
s 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 datosMira 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.