Für query:Cypher - WO ANY Kreuzung
MATCH (movie:Movie {name:'The Matrix'})-[:has_tag]->(movie1Tag:Tag)
WITH movie, collect(movie1Tag) AS movie1Tags
MATCH (movie2:Movie)-[:has_tag]->(movie2Tag:Tag)
WITH movie, movie1Tags, collect(movie2Tag) AS movie2Tags, movie2
WHERE ANY(movieTag IN movie1Tags
WHERE movieTag IN movie2Tags)
AND NOT movie.name = movie2.name
RETURN DISTINCT movie2.name
Gibt es eine Möglichkeit, die Kreuzungen von der WHERE ANY
Anweisung zurück? Gibt es eine Möglichkeit, die Abfrage zu ändern, um sie zurückzugeben?
Bearbeiten: Ich habe es dank Anomaly211 Antwort funktioniert. Ich bewarb mich auch die Kreuzungen auf die Beziehung mit EXTRACT, die ich im Folgenden bei Menschen aufgenommen haben Interesse
MATCH (movie:Movie {name:'The Matrix'})-[:has_tag]->(movie1Tag:Tag)
WITH movie, collect(movie1Tag) AS movie1Tags
MATCH (movie2:Movie)-[:has_tag]->(movie2Tag:Tag)
WITH movie, movie1Tags, collect(movie2Tag) AS movie2Tags, movie2
WITH movie, movie1Tags, collect(movie2Tag) AS movie2Tags, movie2 FILTER(x IN movie1Tags WHERE x IN movie2Tags) AS intersect
FILTER(x IN movie1Tags WHERE x IN movie2Tags) AS intersect
WHERE ANY(movieTag IN movie1Tags WHERE movieTag IN movie2Tags) AND NOT movie.name = movie2.name AS intersect
CREATE UNIQUE (movie)-[:share_tags {shared:EXTRACT(x IN intersect | x.identifier)}]->(movie2)
RETURN DISTINCT movie2.name, intersect
Was meinen Sie durch den Schnitt? Wie wäre es mit einem Beispiel? –
Film 1 hat Tags "Action", "90er", "Fantasy" und "Science-Fiction". Movie 2 hat Tags "Science Fiction", "90er" und "Comedy". Die Schnittmenge sind die Tags "Science-Fiction" und "90er" - die Tags, die beide teilen – Airomega