2013-10-21 2 views
2

Neo4j/Cypher의 컬렉션에있는 요소가 고유하도록하는 쉬운 방법이 있습니까? 콜렉션을 해시 셋으로 만드는 것과 같은 것?Neo4j의 컬렉션에있는 고유 요소

+0

'컬렉션'이라고 할 때 쿼리 결과를 의미합니까? , 또는 노드/관계의 속성으로? – Nicholas

+0

노드의 속성을 의미합니다. – user2608171

답변

1

엔티티 (노드/관계) 속성에는 Set의 개념이 없으며 키/값이 있으며 허용되는 값은 기본/문자열 배열입니다.

Set과 같은 기능을 원하면이 고유성을 적용하기 위해 데이터를 삽입하는 응용 프로그램의 도움을 받아야합니다.

Cypher에는이 기능도 없습니다. 사이퍼에서

-1

, 당신이 컬렉션 (1, 2)를 작업 할 수 있습니다 당신이

... 
MATCH (fred)-[:LIKES]->(fruit)<-[:LIKES]-(fruit_friend) 
WITH fred, COLLECT(DISTINCT(fruit_friend)) as unique_fruit_friends 
... 
1

은 당신이 뭘 하려는지에 따라 에서처럼 DISTINCTmodifier을 사용하여 고유성을 보장 할 수 있습니다, 당신은 할 수 있습니다 사이퍼와 함께 할 수 있습니다.

예를 들어 속성이없는 경우에만 속성에 항목을 추가하려는 경우 두 가지 방법으로 항목을 추가 할 수 있습니다.

START n=node({id}) WHERE NONE(x IN n.cols WHERE x = {val}) SET n.cols = n.cols + {val} RETURN n; 

이 다음 예제는 항상 속성을 수정 끝날 것이다, 그러나 고유성 보장 할과 유용 할 것이다 : 콜렉션 수정이 수정되는 유일한 재산 인 경우

이 예에서는 쿼리를 필터링하고 유용 메서드를 사용하면 다른 속성도 동시에 수정해야하지만 부작용은 항목의 순서가 변경되는 것입니다.

START n=node({id}) 
WITH n, FILTER(x IN n.cols WHERE x <> {val}) as existingCols 
SET n.cols = existingCols + {val} 
RETURN n