Graph 在Neo4J中找到具有方向关系重复模式的N个级别的路径

Graph 在Neo4J中找到具有方向关系重复模式的N个级别的路径,graph,neo4j,cypher,family-tree,Graph,Neo4j,Cypher,Family Tree,我试着用Neo4j来分析家谱中的关系。我对其进行了如下建模: 是的,这是一个有趣的案例。我很确定(尽管我愿意纠正)这是不可能的。您是否有可能同时拥有和维护这两项服务?您可以使用简单的密码查询创建额外的关系: MATCH (parent)-[:MOTHER|FATHER]->()<-[:CHILD]-(child) CREATE (child)-[:CHILD_OF]->parent 匹配(父)-[:母亲|父亲]->()父 好的,这里有一个想法: MATCH path=(chi

我试着用Neo4j来分析家谱中的关系。我对其进行了如下建模:


是的,这是一个有趣的案例。我很确定(尽管我愿意纠正)这是不可能的。您是否有可能同时拥有和维护这两项服务?您可以使用简单的密码查询创建额外的关系:

MATCH (parent)-[:MOTHER|FATHER]->()<-[:CHILD]-(child)
CREATE (child)-[:CHILD_OF]->parent
匹配(父)-[:母亲|父亲]->()父

好的,这里有一个想法:

MATCH path=(child:Person {personID: 3})-[:CHILD|FATHER|MOTHER*]-(ancestor:Person),
WHERE ancestor-[:MOTHER|FATHER]->()
RETURN path
通常我会在
匹配中使用第二个子句,如下所示:

MATCH
  path=(child:Person {personID: 3})-[:CHILD|FATHER|MOTHER*]-(ancestor:Person),
  ancestor-[:MOTHER|FATHER]->()
RETURN path
但是Neo4j(至少在默认情况下,我认为)不会穿过路径。也许逗号分隔可以,这将是一个问题:

MATCH path=(child:Person {personID: 3})-[:CHILD|FATHER|MOTHER]-(ancestor:Person)-[:MOTHER|FATHER]->()

我很想知道你发现了什么

您可以反转模型中
子关系的方向性,如下所示:

(p1:Person)<-[:CHILD]-(f:Family)<-[:FATHER|MOTHER]-(p2)

(p1:Person)我也有同样的问题。我发现他们正在实现你/我们想要的

应用到您的示例中,您可以使用
apoc.path.subgraphNodes
获取Person#3的所有祖先:

MATCH(p1:Person{personId:3})
调用apoc.path.subgraphNodes(p1{

顺序:'>人,孩子>,家庭,人,孩子>,家庭,人,孩子>,家庭,我可以创建直接关系没有问题,因为我正在从SQLite数据库导入我的所有数据。问题是当直接进行亲子关系时,多个配偶和同父异母兄弟姐妹会变得非常混乱。这就是为什么我指定一个家庭单元有父母nd子对象。在正常的数据库建模中,可以有三元或n元关系/角色,但根据Neo4j,这并不容易。必须首先将双方关系对象化,然后才能参与与另一个对象的关系。因此是家庭单元。这是一个很好的方法,添加了这样的约束。两件事:首先,按照模型,在到达另一个:Person节点之前,它仍然需要通过一个:Family节点。其次,我从您的第二个代码片段中得到了错误,其中需要一个逗号。两者都返回一个空集。啊,对了。我添加了标签(我正在查看您的第二个查询,没有看到标签,所以我认为您没有标签)还有逗号。这行吗?我确实想到了。它很可能会简化模型。我仍然对在这种情况下应该做什么的更全局的概念感兴趣,例如,在一个图形模型中,您没有能力更改关系方向或名称。您建议的上面是
(p1:人)