Diese Frage ist eine direkte Erweiterung von a question Ich fragte bereits.Wenn die Anzahl der Eigenschaften größer als n ist, geben Sie einen Untergraphen in Neo4j zurück
sagen, dass ich eine Graph-Datenbank haben, die wie folgt aussieht:
Genau wie die vorherige Frage, die ich fragte, die einzige wirklich interessante daran ist, dass SomeProperty
sein kann ‚Ja‘ oder ‚Nein ".
In der oberen Reihe hat 1 der 3 Knoten ein 'Ja' für diese Eigenschaft.
In der unteren Zeile gibt es 3 Knoten, die für diese Eigenschaft ein 'Ja' haben. Die anderen 2 haben ein "Nein".
Wie schreibe ich eine Cypher-Abfrage, die nur THE WHOLE die untere Zeile zurückgibt, indem Sie die Frage stellen: Hat einer dieser disjunkten Untergraphen 2 oder mehr Werte für SomeProperty = 'Ja'?
Früher empfahl die brillante @cybersam etwas mit wie:
MATCH p=(:Person)-[:RELATED_TO*]->(:Person)
WHERE 2 < REDUCE(s = 0, x IN NODES(p) | CASE WHEN x. SomeProperty = 'Yes' THEN s + 1 ELSE s END)
RETURN p;
..., die die passenden Wege zurückkehren würde. In diesem Fall würde das Rück dieser
aber ich versuche, dies zu verallgemeinern das ganze Set von 5 „B“ Knoten zurückzukehren.
Nachdem ich damit zu kämpfen habe, merke ich, dass ich versuche, den 3-Knoten-Subgraphen zu erstellen, aber nicht zurückgeben. Ich versuche, seine Existenz als eine Möglichkeit zu verwenden, den Supergraph meines Matches zurückzugeben und alle nicht verbundenen Subgraphen zu ignorieren! Das wird ziemlich kompliziert und ich bin ratlos.
Hier ist mein Code:
CREATE (albert:person {gender: 'Male', name: 'Albert', SomeProperty: 'Yes'})
CREATE (annie:person {gender: 'Female', name: 'Annie', SomeProperty: 'No'})
CREATE (adrian:person {gender: 'Female', name: 'Adrian', SomeProperty: 'No'})
CREATE (albert)-[r1:RELATED_TO]->(annie)
SET r1.relationship='related'
CREATE (annie)-[r2:RELATED_TO]->(adrian)
SET r2.relationship='related'
CREATE (bill:person {gender: 'Male', name: 'Bill', SomeProperty: 'Yes'})
CREATE (barb:person {gender: 'Female', name: 'Barb', SomeProperty: 'Yes'})
CREATE (barry:person {gender: 'Male', name: 'Barry', SomeProperty: 'Yes'})
CREATE (bart:person {gender: 'Male', name: 'Bart', SomeProperty: 'No'})
CREATE (bartholemu:person {gender: 'Male', name: 'Bartholemu', SomeProperty: 'No'})
CREATE (bill)-[r4:RELATED_TO]->(barb)
SET r4.relationship='related'
CREATE (barb)-[r5:RELATED_TO]->(barry)
SET r5.relationship='related'
CREATE (barry)-[r6:RELATED_TO]->(bart)
SET r6.relationship='related'
CREATE (bart)-[r7:RELATED_TO]->(bartholemu)
SET r7.relationship='related'
Was macht das '*' Zeichen in '[: RELATED_TO *]'? –
Das '*' in einer Beziehung zeigt eine [variable Länge] (http://neo4j.com/docs/stable/introduction-pattern.html#_variable_length) Beziehung an. – cybersam
ah ... ich verstehe. Es bedeutet "Übereinstimmung mit beliebigen Pfaden beliebiger Länge in Bezug auf die Beziehung RELATED_TO". Vielen Dank! –