https://neo4j.com/docs/cypher-manual/current/clauses/match/
*Example Graph
CREATE
(charlie:Person {name: 'Charlie Sheen'}),
(martin:Person {name: 'Martin Sheen'}),
(michael:Person {name: 'Michael Douglas'}),
(oliver:Person {name: 'Oliver Stone'}),
(rob:Person {name: 'Rob Reiner'}),
(wallStreet:Movie {title: 'Wall Street'}),
(charlie)-[:ACTED_IN {role: 'Bud Fox'}]->(wallStreet),
(martin)-[:ACTED_IN {role: 'Carl Fox'}]->(wallStreet),
(michael)-[:ACTED_IN {role: 'Gordon Gekko'}]->(wallStreet),
(oliver)-[:DIRECTED]->(wallStreet),
(thePresident:Movie {title: 'The American President'}),
(martin)-[:ACTED_IN {role: 'A.J. MacInerney'}]->(thePresident),
(michael)-[:ACTED_IN {role: 'President Andrew Shepherd'}]->(thePresident),
(rob)-[:DIRECTED]->(thePresident),
(martin)-[:FATHER_OF]->(charlie)
1. Relationship types with uncommon characters
관계는 영문자가 아닌 문자 또는 공백을 포함할 수 있음 -> ` 를 사용하여 생성
#Example Graph의 Martin Sheen과 Rob Reiner 사이에 공백 (OLD FRIENDS) 을 포함하는 관계 생성
match
(martin:Person {name: 'Martin Sheen'}),
(rob:Person {name: 'Rob Reiner'})
create (rob)-[:`OLD FRIENDS`]->(martin)
#관계 생성 확인
MATCH (n {name: 'Rob Reiner'})-[r:`OLD FRIENDS`]->()
RETURN type(r)
2. Multiple relationships
관계는 ()--() 형식을 사용하여 여러 관계를 표현할 수 있음
MATCH (charlie {name: 'Charlie Sheen'})-[:ACTED_IN]->(movie)<-[:DIRECTED]-(director)
RETURN movie.title, director.name
3. Variable length relationships
노드와 직접 연결되어 있는 노드 및 그렇지 않은 노드 탐색
여기서 Hop은 그래프 상에서 노드와 노드사이의 관계 직선? (아마도,,,)
사용법 : [:TYPE*minHops..maxHops]
minHop와 maxHops의 기본값은 각각 1과 무한대
maxHops값이 주어지지 않으면 점 생략 가능
#Charlie Sheen과 1~3홉내에 ACTED_IN 관계로 연결된 Movie 노드
MATCH (charlie {name: 'Charlie Sheen'})-[:ACTED_IN*1..3]-(movie:Movie)
RETURN movie.title
4. Variable length relationships with multiple relationship types
여러 관계 type 활용
#Charlie Sheen과 2홉 내에 ACTED_IN 또는 DIRECTED 관계로 연결된 Person 노드
MATCH (charlie {name: 'Charlie Sheen'})-[:ACTED_IN|DIRECTED*2]-(person:Person)
RETURN person.name
5. Relationship variable in variable length relationships
#Charlie Sheen과 2홉 내에 ACTED_IN 관계로 연결된 노드
MATCH p = (actor {name: 'Charlie Sheen'})-[:ACTED_IN*2]-(co_actor)
RETURN relationships(p)
6. Match with properties on a variable length path
예제를 보기에 앞서 데이터 추가
MATCH
(charlie:Person {name: 'Charlie Sheen'}),
(martin:Person {name: 'Martin Sheen'})
CREATE (charlie)-[:ACTED_IN {role: 'Bud', lead: true}]->(:Movie {title: 'Free Money'})<-[:ACTED_IN {role:'New Warden', lead: false}]-(martin),
(charlie)-[:ACTED_IN {role: 'Jake Peterson', lead: true}]->(:Movie {title: 'No Code of Conduct'})<-[:ACTED_IN {role: 'Bill Peterson', lead: true}]-(martin)
관계의 속성이 지정되어 있으면 노드 사이의 모든 관계의 속성이 지정된 값으로 설정되어 있어야 함
#Chralie Sheen과 Martin Sheen사이의 관계 중 속성 lead의 값이 true인 노드만 반환
MATCH p = (charlie:Person)-[* {lead: true}]-(martin:Person)
WHERE charlie.name = 'Charlie Sheen' AND martin.name = 'Martin Sheen'
RETURN p
7. Zero length paths
minHops이 0이라는 것은 곧 자기자신 노드를 뜻함
#Wall Street과 관계된 1홉 이내의 노드 중 actors과 directors를 비롯해 자기자신도 반환
MATCH (wallstreet:Movie {title: 'Wall Street'})-[*0..1]-(x)
RETURN x
8. Named paths
경로가 정해진 관계
#Michael Douglas로부터 나가는 방향과 관계된 노드
MATCH p = (michael {name: 'Michael Douglas'})-->()
RETURN p
'DKE > Neo4j' 카테고리의 다른 글
[Neo4j] MATCH (Get node or relationship by elementId) / 2023.02.08 (0) | 2023.02.08 |
---|---|
[Neo4j] MATCH (Shortest path) / 2023.02.07 (0) | 2023.02.07 |
[Neo4j] MATCH (Relationship basics) / 2023.02.06 (0) | 2023.02.06 |
[Neo4j] MATCH (Basic node finding) / 2023.02.06 (0) | 2023.02.06 |
[Neo4j] REMOVE / 2023.02.03 (0) | 2023.02.03 |