는 다음을 상상해 :
CREATE (:SomeLabel {myId:123})-[:someRelationshipType]->(:SomeLabel {myId:456})
이 그들 사이의 관계를 가진 두 개의 노드를 작성합니다. 관계는 someRelationshipType
입니다.
그럼 다음 쿼리를 실행하면 어떻게됩니까?
ID(root) | root.myId | LABELS(root) | ID(rel) | TYPE(rel) | ID(target) | target.myId
-----------------------------------------------------------------------------------------------
192 | 123 | SomeLabel | 271 | someRelationshipType | 193 | 456
이 몇 가지 흥미로운 것들을 보여줍니다
MATCH
(s:SomeLabel)-[rel:someRelationshipType]->(target:SomeLabel)
RETURN
ID(s), // Built-in Neo4j function to retrieve the internal node id
s.myId, // Access the property myId that you created above
LABELS(s), // Lists all labels for the start node
ID(rel), // Built-in Neo4j function to retrieve the internal relationship id
TYPE(rel), // Built-in Neo4j function to retrieve the relationship type
ID(target), // Built-in Neo4j function to retrieve the internal node id
target.myId // Access the property myId that you created above
쿼리의 출력은 무엇인가 같다. 먼저 자신이 제공하지 않은 값을 반환하는 몇 가지 기본 제공 함수가 있습니다. ID()
함수는 노드의 내부 ID 또는 관계을 반환합니다. 이것은 생성 된 ID로 자신을 제어 할 수 없으며 데이터베이스에 의해 완전히 처리됩니다 (재사용 할 수도 있으므로 실제로 이러한 값에 의존 할 수는 없습니다). 각 노드는 정확히 하나의 내부 ID을 가지며 전체 데이터베이스에서 고유하므로 동일한 내부 ID를 가진 다중 노드를 찾을 수 없습니다.
위의 쿼리에는 myId
이라는 속성도 있습니다. 실제로 우리가 만든 속성이기 때문에 그 속성에 대해 동일한 값을 갖는 다중 노드가있을 수 있습니다. 이러한 속성에 고유 한 값이 포함되어 있는지 확인하는 유일한 방법은 UNIQUE
- 제약 (see the docs here)을 사용하는 것입니다. 모든 labels의 목록을 반환 -
LABELS
: CREATE CONSTRAINT ON (n:SomeLabel) ASSERT n.myId IS UNIQUE
원래 MATCH
- 쿼리의 일부 다른 기능은 다음과 같습니다
고유 제한 조건이 구문을 사용하여 설정할 수 있습니다 노드의 일부
TYPE
- 노드를 만들 때 지정된 관계 유형을 반환합니다.당신은 다음과 같은 쿼리를 사용할 수 있습니다 그래프에 모든 노드를 잡아하려는 경우
마지막 메모 :
MATCH (n) RETURN n;
을하지만, 조심 - 그것은 가장 가능성이 고통스러운 것입니다/그래프가 클 경우 모든 노드를 검색하는 데 비용이 많이 드는 작업입니다.
고맙습니다. 굉장히 유용하다! – user1919
@dkar, 문제 없음 - 도움이된다면 기쁘게 생각합니다! – wassgren