2017-09-27 42 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

相关问题