2015-04-06 3 views
3
(:Dot)-[:CONTAINS]->(:Dot) 

Не каждая точка имеет контейнер, а также нет петель. Atm точка может быть только одна точка. Таким образом, мы в основном говорим о деревьяхЗапрос Cypher для возврата вложенных данных по иерархии

Теперь я хотел бы использовать Neo4j для извлечения данных и вернуть его hierarchally (контейнерами):

[ 
    {"id": 1, "containees": [ 
     {"id": 3}, 
     {"id": 4, "containees": [ 
      {"id": 6}, 
     ]}, 
    ]}, 
    {"id": 2, "containees": [ 
     {"id": 5} 
    ]} 
] 

Запрос не должен использовать фиксированную глубину.

Atm У меня есть только это, и я действительно не уверен, что мои варианты касаются итерации пути.

MATCH (d:Dot) 
OPTIONAL MATCH p = d-[:CONTAINS*]->(d2:Dot) 
RETURN d.id 

ответ

2

Я уверен, что в настоящее время это невозможно с Cypher (кто-то, пожалуйста, поправьте меня, если я ошибаюсь). Cypher хорошо подходит для подбора подграфов и превращает их в таблицы, но не выполняет рекурсивный запрос.

Для такого рода вещей, я думаю, вам нужно будет работать через Java API напрямую. Либо путем взаимодействия с Java с выбранным вами языком, либо путем создания unmanaged extension, чтобы Neo4j возвращал данные для вас в JSON (или в любом другом формате, который вы хотите)

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