노드, 관계 타입, 이동 깊이가 같은 문법 안에 함께 들어가므로 “무엇을 연결했고 얼마나 따라갈지”가 쿼리에서 바로 읽힙니다.
그래프 DB에서는 간선이 1급 객체이므로, 관계를 여러 테이블 조인으로 복원하지 않고도 “연결된 경로”를 바로 질의할 수 있습니다.
CREATE (u:User {name:"김철수", age:28})
MATCH (a:User {name:"김철수"}),
(b:User {name:"이영희"})
CREATE (a)-[:FRIEND {since:"2020-01-01"}]->(b)
`FRIEND`와 `since`가 간선 자체에 붙으므로, 누가 누구와 언제 연결됐는지가 모델 안에 직접 남습니다.
MATCH (me:User {name:"김철수"})
-[:FRIEND*2]->(fof:User)
WHERE fof <> me
RETURN DISTINCT fof.name
`*2`를 보는 순간 “관계를 두 번 따라간다”는 뜻이 읽히므로, 다단계 자기 조인을 머릿속에서 다시 풀어낼 필요가 없습니다.
MATCH path = shortestPath(
(a:User {name:"김철수"})
-[:FRIEND*..6]-
(b:User {name:"박민수"})
)
RETURN path
범위를 `*..6`으로 제한하고 가장 짧은 연결만 고르기 때문에, 경로 탐색 조건과 반환 결과가 같은 구조 안에서 이어집니다.