2017-11-07 1 views
1

여기 모델을 기반으로이 모델의 회의실 근접성을 기준으로 가장 가까운 회의실을 찾으려고합니다. 나는이 같은 결과를 원Cypher에서 가장 가까운 노드를 얻는 방법은 무엇입니까?

+-------+----------+--+ 
| Room | Distance | | 
+-------+----------+--+ 
| room1 |  3 | | 
| room2 |  3 | | 
| room3 |  4 | | 
| room4 |  4 | | 
+-------+----------+--+ 

내 모델 :

MATCH (p:Person {name:"test"})-[r*2..]->(f:Floor)<-[:ROOM_LOCATED_IN_FLOOR]-(r:Room) 
RETURN p, f, r 

단지 사람이있는 회의실을 제공합니다 :이 쿼리를 시도

Model

. 그러나 다른 층에있는 다른 방을 가로 질러 가고 싶었습니다. 테스트를 위해 다음

+0

지금까지 뭐 해봤 어? –

+0

거리를 어떻게 정의합니까? 가장 가까운 층에있는 방? –

+0

이 쿼리를 시도했습니다. MATCH (p : Person {이름 : "테스트"}) - [r * 2 ..] -> (f : 층) <- [: ROOM_LOCATED_IN_FLOOR] - (r : Room) RETURN p , f, r 방금 ​​사람이있는 회의실을 제공합니다. 그러나 나는 다른 층의 다른 방들을 가로 질러 가고 싶었다. –

답변

2

샘플 데이터 : 다음

CREATE (p:Person) 
CREATE (d:Desk) 
CREATE (f1:Floor) 
CREATE (f2:Floor) 
CREATE (r1:Room {name : 'room1'}) 
CREATE (r2:Room {name : 'room2'}) 
CREATE (r3:Room {name : 'room3'}) 
CREATE (r4:Room {name : 'room4'}) 

CREATE (p)-[:SEATED_AT]->(d)-[:LOCATED_IN]->(f1)-[:HAS_NEXT]->(f2) 
CREATE (f1)<-[:PART_OF]-(r1) 
CREATE (f1)<-[:PART_OF]-(r2) 
CREATE (f2)<-[:PART_OF]-(r3) 
CREATE (f2)<-[:PART_OF]-(r4) 

, 당신은 size()relationships() 기능으로 원하는 결과를 얻을 수 있습니다

MATCH p = (:Person)-[*]-(r:Room) 
RETURN r.name as Room, size(relationships(p)) as Distance 
ORDER BY Distance 

가 출력 될 것입니다 :

╒═══════╤══════════╕ 
│"Room" │"Distance"│ 
╞═══════╪══════════╡ 
│"room1"│3   │ 
├───────┼──────────┤ 
│"room2"│3   │ 
├───────┼──────────┤ 
│"room3"│4   │ 
├───────┼──────────┤ 
│"room4"│4   │ 
└───────┴──────────┘ 
+1

이것은 굉장합니다. 감사 –

관련 문제