我正在尝试使用 Neo4j 来分析家谱中的关系。我已经这样建模了:
(p1:Person)-[:CHILD]->(f:Family)<-[:FATHER|MOTHER]-(p2)
我知道我可以省略家庭标签,让孩子与每个父母都有联系,但这对我的目的不切实际。这是我的图表示例,黑线是我希望它生成的路径:
我可以查询它
MATCH p=(n {personID:3})-[:CHILD]->()<-[:FATHER|MOTHER]-()-[:CHILD]->()<-[:FATHER|MOTHER]-()-[:CHILD]->()<-[:FATHER|MOTHER]-() RETURN p
但是这种关系有一个重复的模式。我可以做类似的事情:
MATCH p=(n {personID:3})(-[:CHILD]->()<-[:FATHER|MOTHER]-())* RETURN p
其中 * 表示重复 :CHILD 然后 :FATHER|MOTHER 关系,方向不同?显然,如果关系都是同一个方向,我可以使用
-[:CHILD|FATHER|MOTHER*]->
我希望能够像谱系图一样从第 3 个人一直查询到图表顶部,但如果需要,还可以具体说明多少级别(例如 3 代,而不是行尾) .
我遇到的另一个问题是,如果我不在关系上设置方向,-[:CHILD|FATHER|MOTHER*]-
例如链查找所有其他“表亲、阿姨、叔叔等”。
任何经验丰富的 Cypher 专家可以帮助我吗?