2013-04-23 2 views
4

나는 카테고리와 하위 카테고리 및 하위 카테고리가 무한대 인 그래프가 있습니다. 하나의 암호 쿼리에서이 모든 계층 적 데이터를 어떻게 얻을 수 있습니까? 나에게 다음과 같은 결과를 제공재귀 neo4j 쿼리

START category=node:categoryNameIndex(categoryName = "category") 
MATCH path = category <-  [rel:parentCategory] - subcategory 
RETURN category, collect(subcategory); 

: 내가 노드 neo4j을 사용하고

| category                        | collect(subcategory)                                               | 
==> +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
==> | Node[26]{categoryName:"Test2",categoryDescription:"testDesc",imageUrl:"testUrl",imageName:"imageName"} | [Node[25]{categoryName:"Test1",categoryDescription:"testDesc",imageUrl:"testUrl",imageName:"imageName"}]                          | 
==> | Node[1]{categoryName:"Test1",categoryDescription:"testDesc",imageUrl:"testUrl",imageName:"imageName"} | [Node[26]{categoryName:"Test2",categoryDescription:"testDesc",imageUrl:"testUrl",imageName:"imageName"},Node[2]{categoryName:"Test2",categoryDescription:"testDesc",imageUrl:"testUrl",imageName:"imageName"}] | 

나는 현재이 쿼리가 있습니다. json 형식으로 원하는 것을 보여줍니다.

[{ 
    "categoryName": "Test2", 
    "categoryDescription": "testDesc", 
    "imageUrl": "testUrl", 
    "children": [{ 
     "categoryName": "Test1", 
     "categoryDescription": "testDesc", 
     "imageUrl": "testUrl", 
     "children" : [{ 
      "categoryName": "Test1", 
      "categoryDescription": "testDesc", 
      "imageUrl": "testUrl" 
     }] 
    }] 
}] 

나는 가능한가? 난 항상 프로그래밍 방식으로 또는 여러 쿼리를 사용하여 할 수있는 거 알아. 그러나 단일 쿼리로 수행 할 수 있다면 매우 유용 할 것입니다.

답변

3

당신은 관계 유형 후 *를 추가하여 임의의 깊이의 경로를 일치시킬 수 있습니다 :

START category=node:categoryNameIndex(categoryName = "category") 
MATCH path = category <-[rel:parentCategory*2..5]- subcategory 
RETURN category, collect(subcategory); 

참조 :

START category=node:categoryNameIndex(categoryName = "category") 
MATCH path = category <-[rel:parentCategory*]- subcategory 
RETURN category, collect(subcategory); 

선택적으로, 당신은 또한 최소 및/또는 최대 경로 길이를 지정할 수 있습니다 여기 참조 :

http://docs.neo4j.org/chunked/milestone/query-match.html#match-variable-length-relationships

+0

감사합니다. @ea n5533. 나는 더 나은 이해를 위해 나의 질문을 정교 할 것이다. – RohanJ

+0

이 답변으로 질문에 대한 답변을 찾을 수 있습니까? 단일 쿼리입니다. – ean5533

+0

아니요, 제 질문에 답해줍니다. 내가 준 JSON 예제를 확인한다면 _hierarchical 형식으로 원한다. 현재 여러 쿼리를 실행하고 있습니다. 나는 이것이 가능한지 여부를 모르지만, 그렇다면 그것은 매우 도움이 될 것이다. – RohanJ