2017-09-27 77 views
2

enter image description here我如何獲得兩個節點之間相同的關係數量與Cypher支架

現在我需要查詢,返回的Borko的祖先節點與數量的關係跳..事情是這樣的:

  • Cupko。 .. 1
  • 米爾科... 2
  • 月... 3

questio的第二部分如果我們包含母親關係,那麼查詢會是什麼樣子?結果應該是這樣的:

  • Cupko ......爸...... 1個
  • SomeFemale ...媽媽... 1
  • 米爾科......爸爸...... 2
  • SomeFemale2。 ..媽媽... 2

回答

4

我用這個片段重新創建數據集:

CREATE 
    (:Person {name: 'Jan'})-[:Father]-> 
    (:Person {name: 'Mirko'})-[:Father]-> 
    (:Person {name: 'Cupko'})-[:Father]-> 
    (:Person {name: 'Borko'}) 

你應該保存path和使用路徑的長度得到的跳數:

MATCH p=(b:Person {name: 'Borko'})<-[:Father*]-(n) 
RETURN n, length(p) 

這將返回:

╒════════════════╤═══════════╕ 
│"n"    │"length(p)"│ 
╞════════════════╪═══════════╡ 
│{"name":"Cupko"}│1   │ 
├────────────────┼───────────┤ 
│{"name":"Mirko"}│2   │ 
├────────────────┼───────────┤ 
│{"name":"Jan"} │3   │ 
└────────────────┴───────────┘ 

對於第二部分,你可以使用relationships功能:

MATCH p=(b:Person {name: 'Borko'})<-[:Father|Mother*]-(n) 
WITH p, relationships(p) AS rels, n 
RETURN n, length(p) AS hops, type(rels[length(rels)-1]) AS type 

此回報:

╒════════════════╤══════╤════════╕ 
│"n"    │"hops"│"type" │ 
╞════════════════╪══════╪════════╡ 
│{"name":"Cupko"}│1  │"Father"│ 
├────────────────┼──────┼────────┤ 
│{"name":"Mirko"}│2  │"Father"│ 
├────────────────┼──────┼────────┤ 
│{"name":"Jan"} │3  │"Father"│ 
└────────────────┴──────┴────────┘ 

當然,您可以使用大小寫表達式將關係的名稱轉換爲適當的類型,例如, CASE type(rels[length(rels)-1]) WHEN 'Father' THEN 'Dad' WHEN 'Mother' THEN 'Mom' END AS role

相關問題