Reproduzierbares Praxislabor
Cypher-Musterbibliothek für sichere Einstiege
Liefern vier kleine, parametrisierte Cypher-Muster stabile Kardinalitäten, ohne eine ungebremste Pfadsuche zu erzeugen?
Voraussetzungen
Nutzen Sie eine isolierte Neo4j-Testdatenbank und notieren Sie Server- sowie Cypher-Version. `cypher-shell` verbindet sich mit einem Testkonto, das nur diese Datenbank verändern darf.
Legen Sie vor dem Import einen Eindeutigkeits-Constraint für `Product.id` an. Die vier künstlichen Knoten enthalten zwei Produkte und zwei Teile; reale Geschäftskennungen werden nicht verwendet.
Versuchsaufbau und minimale Daten
Die Bibliothek umfasst Suche per ID, direkte Nachbarn, begrenzten Pfad und Aggregation. Jedes Muster hat Parameter, erwartete Spalten und Kardinalität.
Das Zwei-Hop-Szenario verbindet Modell `m1` über `USES_PART` mit Teil `t1`, das über `REPLACED_BY` auf `t2` zeigt. Eine unverbundene Produktressource dient als Leerfall.
Befehl oder Abfrage
// Einmaliger Aufbau in der isolierten Testdatenbank
CREATE CONSTRAINT lab_product_id IF NOT EXISTS
FOR (p:Product) REQUIRE p.id IS UNIQUE;
CREATE (m1:Product:Lab20260918 {id:'m1'}),
(m2:Product:Lab20260918 {id:'m2'}),
(t1:Part:Lab20260918 {id:'t1'}),
(t2:Part:Lab20260918 {id:'t2'}),
(m1)-[:USES_PART]->(t1), (t1)-[:REPLACED_BY]->(t2);
MATCH (m:Product {id: $modelId})-[:USES_PART]->(old:Part)
MATCH (old)-[:REPLACED_BY]->(replacement:Part)
RETURN old.id AS oldId, replacement.id AS replacementId
ORDER BY oldId, replacementId;
# cypher-shell -P "modelId => 'm1'" -f two-hop.cypherNur in der beschriebenen isolierten Laborumgebung ausführen. Versionen und Exitcodes gehören zum Protokoll.
Erwartetes Ergebnis
Für `modelId = "m1"` enthält die Ausgabe exakt eine Datenzeile: `t1, t2`. Die Suche nach ID liefert ein Produkt; die Nachbarschaftsabfrage einen direkten Teil.
Speichern Sie neben jeder Query ein CSV-Sollresultat. Ein MATCH gilt nur als bestanden, wenn Spaltennamen, Zeilenanzahl und Werte übereinstimmen. Ein Browserdiagramm ersetzt diesen Vergleich nicht.
Negativtest
Setzen Sie `modelId = "m2"`. Erwartet werden null Zeilen und kein Fehler. Dieser Leerfall unterscheidet eine gültige Query von einer fehlenden Parameterbindung.
Ersetzen Sie testweise `[:REPLACED_BY]` durch `[*]`. Die Bibliothek muss diese unbeschränkte Variante ablehnen, weil ihre Laufzeit auf zyklischen Graphen nicht kontrolliert ist.
Rollback und Aufräumen
Löschen Sie die isolierte Testdatenbank oder nur Knoten mit dem eindeutigen Laborlabel `Lab20260918`. Prüfen Sie vorher, dass dieses Label außerhalb des Versuchs nicht existiert.
Entfernen Sie den Test-Constraint nur in der weggeworfenen Datenbank. Verwenden Sie in einer geteilten Instanz niemals ein breites `MATCH (n) DETACH DELETE n`.
Einordnung
Kleine Muster bleiben reviewbar, weil Startpunkt, Richtung, Pfadlänge und Ergebnisvertrag sichtbar sind. Die Bibliothek ist kein Versprechen für fremde Datenverteilungen.
Quellen zu diesem Beitrag
Die Primärquellen für „Cypher-Musterbibliothek für sichere Einstiege“ wurden am 18.09.2026 geprüft. Versions- und Statusangaben sind vor einem produktiven Einsatz erneut zu kontrollieren.
- Neo4j Cypher MATCH
Primärdokumentation für MATCH-Muster. - Neo4j cypher-shell
Primärdokumentation der CLI. - Neo4j variable-length patterns
Referenz für begrenzte Pfade.