현재 새 응용 프로그램을 개발 중이므로 위치를 관리해야합니다 (대륙> 국가> 지역> 도시).구문 분석 결과/어린이 찾기
나는 사이퍼 사용 neo4j에서 직접 나무를 얻기 위해 (성공없이) 시도하고있다 :
MATCH p = (r:Location)-[:CONTAINS*]->()
WHERE r.category='continent'
RETURN p AS path
지금, 나는 그 datas를 구문 분석 할을, 그래서 난이 방법으로 수행 할 수 있습니다
MATCH (r:Location)-[:CONTAINS]->(r2)
WHERE r.category='continent'
OPTIONAL MATCH (r2)-[:CONTAINS]->(r3)
OPTIONAL MATCH (r3)-[:CONTAINS]->(r4)
OPTIONAL MATCH (r4)-[:CONTAINS]->(r5)
OPTIONAL MATCH (r6)-[:CONTAINS]->(r6)
RETURN r.name, r.category, r2.name, r2.category, r3.name, r3.category, r4.name,r4.category, r5.name, r5.category, r6.name, r6.category
을
하지만 최대 6 개의 관계가 있기 때문에 기다리는 응답이 아니므로이 솔루션이 마음에 들지 않습니다. 내가 그렇게하면 나무를 깰 위험이 있습니다.
[ { 'r.name': 'Europe','r.category': 'continent','r2.name': 'Germany','r2.category': 'country','r3.name': null,'r3.category': null,'r4.name': null,'r4.category': null,'r5.name': null,'r5.category': null,'r6.name': null,'r6.category': null },
{ 'r.name': 'Europe','r.category': 'continent','r2.name': 'France','r2.category': 'country','r3.name': 'Ile de France','r3.category': 'region','r4.name': 'Paris','r4.category': 'city','r5.name': null,'r5.category': null,'r6.name': null,'r6.category': null },
{ 'r.name': 'Europe','r.category': 'continent','r2.name': 'France','r2.category': 'country','r3.name': 'Ile de France','r3.category': 'region','r4.name': 'Versailles','r4.category': 'city','r5.name': null,'r5.category': null,'r6.name': null,'r6.category': null },
{ 'r.name': 'Europe','r.category': 'continent','r2.name': 'France','r2.category': 'country','r3.name': 'Ile de France','r3.category': 'region','r4.name': 'Montreuil','r4.category': 'city','r5.name': null,'r5.category': null,'r6.name': null,'r6.category': null },
{ 'r.name': 'Europe','r.category': 'continent','r2.name': 'Belgium','r2.category': 'country','r3.name': null,'r3.category': null,'r4.name': null,'r4.category': null,'r5.name': null,'r5.category': null,'r6.name': null,'r6.category': null } ]
JSON 형식처럼 '어린이'로 나무의 얻을/결과를 분석 내 쿼리를 변경할 수있는 방법이있다 : 당신의 도움에 대한
[{"name":"Africa"},{"name":"Europe","childrens":[{"name":"France"},{"name":"Germany"},{"name":"Belgium","childrens":[{"name":"Brussels Capitale","childrens":[{"name":"Brussels Capitale"}]}]}]}]
감사합니다!
Fred.
얍, 감사합니다 ... 즉, 내가 찾은 가장 가까운 솔루션입니다 ...하지만 난이 (지금) 얻을 수없는 발견 이전 수집에서 수집 ... 이 검색어를 사용하고 있습니다 : MATCH (l : 위치) WHERE l.category = '대륙'선택적인 일치 (l) - [: 포함] -> (l2) 선택 사항 일치 (l2) - [: 포함] -> (l3) 선택 일치 (l3) - [: 포함] -> (l4) 복귀 이름 : l.name, 자식 : COLLECT (distinct {name : 어린이 : COLLECT ( 하지만이 오류가 발생합니다 : '오류 : 집계 함수 내에서 집계 함수를 사용할 수 없습니다 (예 : 이름 : l3.name, 자식 : . – frednotet
그리고이 중 하나와 함께, "알 수없는 오류"가 나타납니다. '일치 (l : 위치) 어디에서?category = '대륙' 선택 사항 일치 (l) - [: 포함] - (l2) 선택 사항 일치 (12) - [: 포함] - (l3) WITH l ASI, 12 AS l2, 13 AS l3, COLLECT (DISTINCT l2.name) AS children WITH l AS l, l2 AS l2, l3 AS l3, AS AS 어린이, COLLECT (DISTINCT l3.name) AS children2 RETURN {name : l, children : {name : children, children : {이름 : 어린이 2}}}' – frednotet