2013-06-22 7 views
1

노드 (8)에 두 개의 자식 노드 (13)와 노드 (14)가있는 것처럼 트리 구조가 있습니다. cyhper로 node (8)를 삭제할 때 모든 하위 항목을 삭제하는 방법은 무엇입니까?길이가 변한 노드를 삭제하는 방법

다음과 같이 작성합니다. " START r = 노드 (8) 일치 함 -> : children * 0 ..] -> d 일치 d- [x] -() Delete d, x"

작동해야하지만 실제로는 node (8) 만 삭제하고 오류가 발생합니다. 실제로 이런 컬렉션을 삭제하려고합니다.

  • --- D ------------------- R
  • 노드 (8)를 REL ---------- (16)
  • 노드 (8) ---------- REL (17)
  • 노드 (9) ---------- REL (16)
  • 노드 (10) --------- Rel (17)

첫 번째 노드 (8)를 삭제하면 두 번째 노드 (8)가 삭제되고 더 이상 존재하지 않으므로 오류가 발생합니다. . 그것을 반환 :

  • I 이렇게 사이퍼를 작성할 때 유선 원인이다 : 는 "- - [아이들 * 0 ...]"이 반환 d D (8) MATCH의 R은 R = 노드 시작 " D --- ---

  • 노드 (8)
  • 노드 (8)
  • 노드 (9)
  • 노드 (10)

그리고 맞습니다. 하지만 우리가 알다시피, 나는 그들과 관계를 지울 수 없으므로 "WITH"가있는 사이퍼를 써야합니다.

"START r = node (8) MATCH r - [: children * 0 .. ] -> d d 일치 d- [x] -() Return d, x "

그리고 잘못된 결과가 다시 나타납니다.

  • --- D ------------------- R
  • 노드 (8)를 REL ---------- (16)
  • 노드 (8) ---------- REL (17)
  • 노드 (9) ---------- REL (16)
  • 노드 (10) --------- Rel (17)

아무도 도와 줄 수 있습니까? 정말 우울합니다. 정말 neo4j를 좋아하지만 "삭제"부분이 너무 힘듭니다. "Force Delete"를 사용하고 Neo4j가 다음과 같이 관계를 자동으로 삭제하지 않는 이유는 무엇입니까?

"START r = node (8) MATCH r - [: children * 0 ..] -> d FORCE DELETE d"

그리고 btw, 왜 "삭제"부분에서 별개를 사용할 수 없습니까?

답변

2

이전 neo4j 버전에 버그가있었습니다. 기억이 안납니다. 어떤 버전을 사용하고 있습니까?노드에 대한 오류없이이 종류의 쿼리를 수행 할 수 있어야합니다.

나는 또한이 구문이 더 쉬워야한다는 데 동의합니다. 이게 내가 일하는 방법이야.

start n=node(8) // start at the node you want to delete 
match n-[r:children*0..]->m, n-[anyothers?]-() // find your pattern to delete, and find any other relationships coming off of n (inbound/non :children) 
foreach(x in r: delete x) // delete all the relationships for children 
delete m, n, anyothers; // delete the nodes and any other relationships 
+0

와우, 훌륭하게 작동합니다. 감사합니다. Neo4j 팀이 앞으로 삭제 부분을 향상시킬 수 있기를 바랍니다. – yades

+0

BTW, 2.2.0-M03, 을 사용하고 있습니다.하지만 1.8 릴리스, 1.9 릴리스를 시도했지만 모두 동일한 문제가 있습니다. – yades

관련 문제