Finden von Knoten, die alle gemeinsamen Intermediäre haben

Ich erstelle ein System, in dem wir zusammenpassenorders zustaff. Konzeptionell einorder ist eine Aufforderung an die Person, etwas zu arbeiten, und astaff ist eine Person, die diese Arbeit machen kann. Einorder kann eine oder mehrere habenrequirements (d. h. Einschränkungen, wer die Arbeit machen darf) und astaff kann noch einen habenrequirements (d. h. Qualifikationen für die Arbeit).

Ich versuche, eine Verschlüsselungsabfrage zu erstellen, die mir alles gibtstaff die habenalles desrequirements von einem bestimmten aufgeführtorder. Anders gesagt, ich versuche alles zu findenstaff Knoten, die mit jedem verwandt sindrequirement Knoten, der mit einem gegebenen verwandt istorder Knoten.Meine Frage ist: Wie erstelle ich eine Verschlüsselungsabfrage, um diese Geschäftslogik zu modellieren?

Betrachten Sie als Beispiel die folgenden Beispieldaten:

Eine Bildansicht meiner BeispieldatenAlternativ ist hiereine interaktive Konsole für meine Daten

Schaue auf dieorderId: 1 Knoten. es hat einrequires Beziehung zu zwei Knoten, beschriftetRN undER IV. In den Auftragswörtern erfordert Auftrag # 1, dass alle Bewerber die RN-Qualifikation und die ER IV-Qualifikation haben. Es kommt also vor, dass MitarbeiterEvan (staffId: 1) verfügt über beide Qualifikationen, sodass er sich auf diese Stelle bewerben kann. Der MitarbeiterTim Hat einer dieser Anforderungen, aber nicht beide, so sollte er nicht in der Lage sein, sich für diesen Job zu bewerben. Zusätzlich,orderId: 2 Es gibt nur eine Anforderung, die sowohl Evan als auch Tim haben. Sie sollten sich also beide für diese Stelle bewerben können.

Wenn ich also mit der ersten Bestellung anfangen würde, würde ich nur Evan zurückhaben wollen. Wenn ich mit der 2. Bestellung anfangen würde, würde ich Evan und Tim * zurückhaben wollen.

Die folgende Abfrage befindet sich auf halbem Weg. Es gibt mir alle eindeutigen Pfade von einer bestimmten Bestellung zu einem Mitarbeiter nach Bedarf. Es wird jedoch nicht überprüft, ob JEDER Anforderungspfad erfüllt ist (was bedeutet, dass es derzeit nur für Aufträge funktioniert, die nur eine einzige Anforderung haben):

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

Also, was sind meine Möglichkeiten? Kann ich irgendwie das Vorhandensein einer unbekannten Anzahl übereinstimmender Beziehungen überprüfen? Oder muss ich meine Daten anders modellieren?

*Bearbeiten: Ich habe beim Einrichten meiner Beispieldaten einen Fehler gemacht.Tim sollte mit in Verbindung gebracht worden seinRN damit qualifizierte er sich für die bestellung # 2.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage