2013-04-23 3 views
4

У меня есть график, который имеет категории и подкатегории и под-подразделы до неопределенного уровня. Как я могу получить все эти иерархические данные в одном шифрованном запросе?Рекурсивный запрос neo4j

я в настоящее время этот вопрос:

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

Который дает мне следующий результат:

| 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"}] | 

Я использую узел-Neo4j. Я приведу пример того, что я хочу в формате json.

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

I это возможно? Я знаю, что всегда могу делать это программно ИЛИ, используя несколько запросов. Но это будет очень полезно, если это можно сделать в одном запросе.

ответ

3

Вы можете соответствовать путям произвольной глубины, добавив * после типа отношений:

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

При желании можно также указать минимальный и/или максимальную длину пути:

START category=node:categoryNameIndex(categoryName = "category") 
MATCH path = category <-[rel:parentCategory*2..5]- 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, который я дал, я хочу его в _иерархическом формате_. В настоящее время я делаю это, уволяя несколько запросов. Я не знаю, возможно ли это, но если это тогда будет очень полезно. – RohanJ

Смежные вопросы