【问题标题】:How can I get the relationship between start node and end node?如何获取起始节点和结束节点之间的关系?
【发布时间】:2026-02-20 18:35:02
【问题描述】:

我正在寻找家庭关系。

例如,我想知道我和我父亲的妻子之间的关系是什么?它应该返回母亲。

我和我妈妈的女儿是什么关系?它应该返回姐姐。

这就是我的图表的样子。有 8 个关系和 2 个标签(男性或女性)。

如何在不指定任何节点的情况下实现这一点?例如,如果我想知道我和我父亲的女儿之间的关系。

我想做MATCH () -[:Father]->()-[:Daughter]->()之类的事情以及开始和结束节点之间的关系。

我确信这个查询是绝对错误的,但我希望你能明白我在这里想要达到的目标。

【问题讨论】:

  • 你不能匹配没有节点的关系,我的意思是如果你想知道你和你父亲的女儿之间的关系,你必须使用裁判给你(或你父亲的女儿)的节点女儿)。否则,您将匹配“女儿”的每个关系名称“父亲”
  • 但是每个关系都会返回相同的值,对吧?所以不是问题。
  • 我不明白你的问题,所以^^"
  • @Supamiu 有没有办法获取所有匹配的() -[:Father]->()-[:Daughter]->() 节点?

标签: graph neo4j


【解决方案1】:

所以,

一开始 - 你应该总是指定一些节点。

让我们创建一些数据:

CREATE (me:Person)
CREATE (mother:Person)
CREATE (daughter:Person)
CREATE (me)-[:Son]->(mother)
CREATE (me)<-[:Mother]-(mother)
CREATE (me)-[:Brother]->(daughter)
CREATE (me)<-[:Sister]-(daughter)
CREATE (mother)-[:Mother]->(daughter)
CREATE (mother)<-[:Daughter]-(daughter)


我和我妈妈的女儿是什么关系?它应该返回姐姐。

现在我们可以找到您问题的答案:

MATCH (me)<-[:Mother]-()<-[:Daughter]-(she)
MATCH (me)<-[r]-(she)
RETURN type(r)

结果:

Sister

我们做了什么:

  • 第一个匹配:指定起始路径
  • 第二场比赛:询问所需路径
  • 返回:获取路径结果

例如,我想知道我和我父亲的妻子之间的关系是什么?它应该返回母亲。

这样的事情应该可以工作:

MATCH (me)<-[:Father]-()<-[:Wife]-(she)
MATCH (me)<-[r]-(she)
RETURN type(r)

结果:

Mother

【讨论】:

  • 非常感谢 :) 不过只有一个问题。为什么它会返回n 次?其中n 是关系数。
  • 当你指定MATCH (me)&lt;-[r]-(she) - 这意味着你想要这两个节点之间的所有关系。因此,您将收到这些节点之间的所有关系。如果您想获得特定的关系 - 那么您应该以某种方式缩小您的查询范围。
  • 哦,没关系。我的数据库中有重复的数据。所以这就是它返回不止一个的原因。谢谢。