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 desrequirement
s 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 DatenSchaue 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.