首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Cypher获得两个节点之间相同关系的数目?

如何用Cypher获得两个节点之间相同关系的数目?
EN

Stack Overflow用户
提问于 2017-09-27 10:17:14
回答 1查看 103关注 0票数 2

现在,我需要查询返回Borko的祖先节点和关系跳数。就像这样:

  • 库普科.1
  • 米尔科.2
  • 1月3日

问题的第二部分:如果我们把母亲的关系包括在内,询问会是什么样子的?结果应该是:

  • 库普科..。爸爸.1
  • SomeFemale ...妈妈.1
  • 米尔科..。爸爸.2
  • SomeFemale2 ...妈妈.2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-27 10:26:31

我使用这个片段来重新创建您的数据集:

代码语言:javascript
复制
CREATE
   (:Person {name: 'Jan'})-[:Father]->
   (:Person {name: 'Mirko'})-[:Father]->
   (:Person {name: 'Cupko'})-[:Father]->
   (:Person {name: 'Borko'})

您应该保存路径并使用路径的长度来获得跳数:

代码语言:javascript
复制
MATCH p=(b:Person {name: 'Borko'})<-[:Father*]-(n)
RETURN n, length(p)

这将返回:

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

对于第二部分,您可以使用relationships函数:

代码语言:javascript
复制
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

这将返回:

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

当然,您可以使用case表达式将关系的名称转换为适当的类型,例如CASE type(rels[length(rels)-1]) WHEN 'Father' THEN 'Dad' WHEN 'Mother' THEN 'Mom' END AS role

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46445309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档