Neo4j查询建模传递性clousure

时间:2015-04-30 17:07:37

标签: neo4j

我正在探索GraphDB查询语言,并在OriendDB here中询问有关传递闭包支持的问题?我想看看Neo4J如何支持这个功能:

简而言之,假设我的节点都标记为PERSON。我有一个叫做“父亲”的边缘将这些人联系在一起。对于给定节点说p1,我想知道Neo4j中的以下查询是怎么样的:

  

找到p1的所有祖先?

我不熟悉Neo4j语法(但我认为可以定义上面我解释的这种结构),所以请原谅我跳过模式定义。

1 个答案:

答案 0 :(得分:0)

你可以更进一步,为祖先创建一个排序:

  

MATCH(n:Person {RN:1})   匹配p = n - [:父亲|母亲* .. 99] - > x   返回x.RN为RN,x.fullname为Name,length(p)为generation,reduce(srt2 ='',q IN节点(p)| srt2 + replace(replace(q.sex, ' M',' A'),' F'' B'))AS sortOrder   按sortOrder排序

这是为家谱应用程序开发的,所以它有母亲和父亲。在这种情况下,父亲在(A)母亲(B)之前排序。如果您只是寻找行的末尾(union_id = 1表示没有父母):

  

MATCH(n:Person {RN:1})   匹配p = n - [:父亲|母亲* .. 99] - > x   其中x.union_id = 1   返回x.RN为RN,x.fullname为Name,length(p)为generation,reduce(srt2 ='',q IN节点(p)| srt2 + replace(replace(q.sex, ' M'' A'),' F'' B'))AS sortOrder,x.union_id